For at sende javascript-kode ind fra Python skal du pakke den ind i en bson.Code
objekt, da ellers Python selv (i stedet for PyMongo) vil forsøge at parse det. Dette giver dig:
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)
}'''))
Men det faktum, at du bruger self
derinde får det til at se ud som om du vil bruge Python-kode der, ikke javascript-kode. Fra dokumentationen
, det ser ud til, at markørobjektet returneres fra find
implementerer Python's Sequence-protokol - hvilket betyder, at du bare burde kunne bruge en almindelig Python-løkke i stedet for forEach
(som dokumenterne synes at sige, at PyMongo alligevel ikke implementerer):
for u in self.request.db.myCollection.find():
u.forSong = self.request.db.song.find_one({}, {'_id': 1})
self.request.db.myCollection.save(u)