पायथन से जावास्क्रिप्ट कोड पास करने के लिए, आपको इसे में लपेटना होगा। bson.Code
ऑब्जेक्ट, अन्यथा पाइथन स्वयं (पायमोंगो के बजाए) इसे पार्स करने का प्रयास करेगा। यह आपको देता है:
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
. का उपयोग कर रहे हैं वहां ऐसा लगता है कि आप वहां पाइथन कोड का उपयोग करना चाहते हैं, जावास्क्रिप्ट कोड नहीं। दस्तावेज़ीकरण
से , ऐसा लगता है कि कर्सर ऑब्जेक्ट find
. से लौटा है पायथन के अनुक्रम प्रोटोकॉल को लागू करता है - जिसका अर्थ है कि आपको 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)