sql >> Databasteknik >  >> NoSQL >> MongoDB

Pymongo forEach-formatering

För att skicka in javascript-kod från Python måste du slå in den i en bson.Code objekt, eftersom Python själv (snarare än PyMongo) annars kommer att försöka analysera det. Detta ger dig:

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

Men det faktum att du använder self där får det att se ut som att du vill använda Python-kod där, inte javascript-kod. Från dokumentationen , det ser ut som att markörobjektet returneras från find implementerar Pythons Sequence-protokoll - vilket betyder att du bara borde kunna använda en vanlig Python-loop istället för forEach (vilket dokumenten verkar säga att PyMongo ändå inte implementerar):

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


  1. MongoDB-skärning, hur balanserar den om när man lägger till nya noder?

  2. Hur sammanställer man summan i MongoDB för att få ett totalt antal?

  3. MongoDB:hur man räknar antalet nycklar i ett dokument?

  4. Mongo-anslutning stängd i keystonejs app