Untuk meneruskan kode javascript dari Python, Anda perlu membungkusnya dengan bson.Code
objek, karena jika tidak, Python sendiri (bukan PyMongo) akan mencoba menguraikannya. Ini memberi Anda:
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)
}'''))
Tetapi fakta bahwa Anda menggunakan self
di sana membuatnya terlihat seperti Anda ingin menggunakan kode Python di sana, bukan kode javascript. Dari dokumentasi
, sepertinya objek Kursor dikembalikan dari find
mengimplementasikan protokol Urutan Python - artinya Anda harus dapat menggunakan loop Python biasa alih-alih forEach
(yang menurut dokumen tampaknya tidak diterapkan oleh PyMongo):
for u in self.request.db.myCollection.find():
u.forSong = self.request.db.song.find_one({}, {'_id': 1})
self.request.db.myCollection.save(u)