Om javascript-code vanuit Python door te geven, moet je deze in een plaatsen bson.Code
object, omdat anders Python zelf (in plaats van PyMongo) het zal proberen te ontleden. Dit geeft je:
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)
}'''))
Maar het feit dat je self
. gebruikt daarin zorgt ervoor dat het lijkt alsof je daar Python-code wilt gebruiken, geen javascript-code. Uit de documentatie
, lijkt het op het Cursor-object dat is geretourneerd door find
implementeert Python's Sequence-protocol - wat betekent dat je gewoon een gewone Python-loop zou moeten kunnen gebruiken in plaats van forEach
(waarvan de documenten lijken te zeggen dat PyMongo het toch niet implementeert):
for u in self.request.db.myCollection.find():
u.forSong = self.request.db.song.find_one({}, {'_id': 1})
self.request.db.myCollection.save(u)