sql >> Base de Datos >  >> NoSQL >> MongoDB

Pymongo para cada formato

Para pasar el código javascript desde Python, debe envolverlo en un bson.Code objeto, ya que de lo contrario Python mismo (en lugar de PyMongo) intentará analizarlo. Esto te da:

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

Pero el hecho de que estés usando self allí hace que parezca que desea usar el código de Python allí, no el código de JavaScript. De la documentación , parece que el objeto Cursor devuelto desde find implementa el protocolo de secuencia de Python, lo que significa que debería poder usar un bucle de Python normal en lugar de forEach (que los documentos parecen decir que PyMongo no implementa de todos modos):

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