MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Formatage Pymongo pour chaque

Pour transmettre du code javascript depuis Python, vous devez l'envelopper dans un bson.Code objet, car sinon Python lui-même (plutôt que PyMongo) essaiera de l'analyser. Cela vous donne :

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

Mais le fait que vous utilisiez self là-bas donne l'impression que vous voulez utiliser du code Python, pas du code javascript. À partir de la documentation , il ressemble à l'objet Cursor renvoyé par find implémente le protocole Sequence de Python - ce qui signifie que vous devriez simplement pouvoir utiliser une boucle Python normale au lieu de forEach (ce que les docs semblent dire que PyMongo n'implémente pas de toute façon):

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