Per passare il codice javascript da Python, devi racchiuderlo in un bson.Code
oggetto, poiché altrimenti Python stesso (piuttosto che PyMongo) proverà ad analizzarlo. Questo ti 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)
}'''))
Ma il fatto che stai usando self
in lì sembra che tu voglia usare il codice Python lì, non il codice javascript. Dalla documentazione
, sembra l'oggetto Cursor restituito da find
implementa il protocollo Sequence di Python, il che significa che dovresti essere in grado di usare un normale ciclo Python invece di forEach
(che i documenti sembrano dire che PyMongo non implementa comunque):
for u in self.request.db.myCollection.find():
u.forSong = self.request.db.song.find_one({}, {'_id': 1})
self.request.db.myCollection.save(u)