如何格式化forEach函数,以便它可以在多行上放置而不会导致语法错误?喜欢的东西Pymongo for each formatting
self.request.db.myCollection.find().forEach(
function(u) {
u.forSong = self.request.db.song.find_one({}, {'_id': 1})
self.request.db.save(u)
})
如何格式化forEach函数,以便它可以在多行上放置而不会导致语法错误?喜欢的东西Pymongo for each formatting
self.request.db.myCollection.find().forEach(
function(u) {
u.forSong = self.request.db.song.find_one({}, {'_id': 1})
self.request.db.save(u)
})
要通过JavaScript代码从Python中,你需要用它在bson.Code
对象,否则Python本身(而不是PyMongo)将尝试解析它。这使您:
import bson
self.request.db.myCollection.find().forEach(bson.Code('''
function(u) {
u.forSong = self.request.db.song.find_one({}, {'_id': 1})
self.request.db.save(u)
}'''))
但事实上,你正在使用self
在那里使它看起来像你想有使用Python代码,而不是JavaScript代码。从documentation看来,从find
返回的光标对象实现了Python的Sequence协议 - 这意味着您应该只能使用常规Python循环而不是forEach
(文档似乎说PyMongo并未实现):
for u in self.request.db.myCollection.find():
u.forSong = self.request.db.song.find_one({}, {'_id': 1})
self.request.db.myCollection.save(u)
传递任何蒙戈命令,而无需Python的在后台做任何事情,你需要使用eval。所以你的例子需要这样调用:
self.request.db.eval('db.myCollection.find().forEach(
function(u) {
u.forSong = db.song.find_one({}, {"_id": 1});
self.request.db.save(u);
})')
你试过拖尾反斜杠吗? – 2012-08-08 06:20:40