Chcete-li předat kód javascriptu z Pythonu, musíte jej zabalit do bson.Code
objekt, protože jinak se jej sám Python (spíše než PyMongo) pokusí analyzovat. To vám dává:
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)
}'''))
Ale skutečnost, že používáte self
tam to vypadá, že tam chcete použít kód Pythonu, ne kód javascript. Z dokumentace
, vypadá to, že objekt Cursor se vrátil z find
implementuje protokol Python's Sequence – což znamená, že byste měli být schopni používat běžnou smyčku Pythonu namísto forEach
(což se zdá, že dokumenty říkají, že PyMongo stejně neimplementuje):
for u in self.request.db.myCollection.find():
u.forSong = self.request.db.song.find_one({}, {'_id': 1})
self.request.db.myCollection.save(u)