Để chuyển mã javascript vào từ Python, bạn cần phải bọc nó trong bson.Code
đối tượng, vì nếu không thì chính Python (chứ không phải PyMongo) sẽ cố gắng phân tích cú pháp nó. Điều này mang lại cho bạn:
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)
}'''))
Nhưng thực tế là bạn đang sử dụng self
trong đó làm cho nó trông giống như bạn muốn sử dụng mã Python ở đó, không phải mã javascript. Từ tài liệu
, có vẻ như đối tượng Con trỏ được trả về từ find
triển khai giao thức Trình tự của Python - nghĩa là bạn chỉ có thể sử dụng một vòng lặp Python thông thường thay vì forEach
(mà các tài liệu dường như nói rằng PyMongo vẫn không triển khai):
for u in self.request.db.myCollection.find():
u.forSong = self.request.db.song.find_one({}, {'_id': 1})
self.request.db.myCollection.save(u)