如何格式化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