Um Javascript-Code von Python zu übergeben, müssen Sie ihn in ein einschließen bson.Code
-Objekt, da sonst Python selbst (und nicht PyMongo) versuchen wird, es zu analysieren. Das ergibt:
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)
}'''))
Aber die Tatsache, dass Sie self
verwenden darin sieht es so aus, als ob Sie dort Python-Code verwenden möchten, keinen Javascript-Code. Aus der Dokumentation
, sieht es aus wie das von find
zurückgegebene Cursor-Objekt implementiert das Sequence-Protokoll von Python - was bedeutet, dass Sie nur in der Lage sein sollten, eine reguläre Python-Schleife anstelle von forEach
zu verwenden (was die Dokumentation zu sagen scheint, dass PyMongo sowieso nicht implementiert):
for u in self.request.db.myCollection.find():
u.forSong = self.request.db.song.find_one({}, {'_id': 1})
self.request.db.myCollection.save(u)