MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Pymongo für jede Formatierung

Um Javascript-Code von Python zu übergeben, müssen Sie ihn in ein einschließen bson.Code -Objekt, da sonst Python selbst (und nicht PyMongo) versuchen wird, es zu analysieren. Das ergibt:

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)
     }'''))

Aber die Tatsache, dass Sie self verwenden darin sieht es so aus, als ob Sie dort Python-Code verwenden möchten, keinen Javascript-Code. Aus der Dokumentation , sieht es aus wie das von find zurückgegebene Cursor-Objekt implementiert das Sequence-Protokoll von Python - was bedeutet, dass Sie nur in der Lage sein sollten, eine reguläre Python-Schleife anstelle von forEach zu verwenden (was die Dokumentation zu sagen scheint, dass PyMongo sowieso nicht implementiert):

for u in self.request.db.myCollection.find():
   u.forSong = self.request.db.song.find_one({}, {'_id': 1})
   self.request.db.myCollection.save(u)