MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Pymongo forEach formattazione

Per passare il codice javascript da Python, devi racchiuderlo in un bson.Code oggetto, poiché altrimenti Python stesso (piuttosto che PyMongo) proverà ad analizzarlo. Questo ti dà:

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

Ma il fatto che stai usando self in lì sembra che tu voglia usare il codice Python lì, non il codice javascript. Dalla documentazione , sembra l'oggetto Cursor restituito da find implementa il protocollo Sequence di Python, il che significa che dovresti essere in grado di usare un normale ciclo Python invece di forEach (che i documenti sembrano dire che PyMongo non implementa comunque):

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