Para passar o código javascript do Python, você precisa envolvê-lo em um
bson.Code
objeto, pois, caso contrário, o próprio Python (em vez do PyMongo) tentará analisá-lo. Isso lhe dá: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)
}'''))
Mas o fato de você estar usando
self
lá faz parecer que você quer usar o código Python lá, não o código javascript. Da documentação
, parece que o objeto Cursor retornado de find
implementa o protocolo Sequence do Python - o que significa que você deve ser capaz de usar um loop regular do Python em vez de forEach
(que os documentos parecem dizer que o PyMongo não implementa de qualquer maneira):for u in self.request.db.myCollection.find():
u.forSong = self.request.db.song.find_one({}, {'_id': 1})
self.request.db.myCollection.save(u)