Pour transmettre du code javascript depuis Python, vous devez l'envelopper dans un bson.Code
objet, car sinon Python lui-même (plutôt que PyMongo) essaiera de l'analyser. Cela vous donne :
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)
}'''))
Mais le fait que vous utilisiez self
là-bas donne l'impression que vous voulez utiliser du code Python, pas du code javascript. À partir de la documentation
, il ressemble à l'objet Cursor renvoyé par find
implémente le protocole Sequence de Python - ce qui signifie que vous devriez simplement pouvoir utiliser une boucle Python normale au lieu de forEach
(ce que les docs semblent dire que PyMongo n'implémente pas de toute façon):
for u in self.request.db.myCollection.find():
u.forSong = self.request.db.song.find_one({}, {'_id': 1})
self.request.db.myCollection.save(u)