0

mongodb/python/pymongo 中的新手。我的 mongodb 客户端代码工作正常。这里是 :

db.meteo.find().forEach( function(myDoc) {
db.test.update({"contract_name" : myDoc.current_observation.observation_location.city},
                      { $set: { "temp_c_meteo" : myDoc.current_observation.temp_c ,
                             }
                      },
                      {upsert:false,
                      multi:true}) 
              })

当contract_name(来自测试集合)等于current_observation.observation_location.city(来自meteo集合)时,这会将temp_c_meteo列添加到我的测试集合中的所有文档中。这就是我想要的!

但是,我希望这在 Python 中也能正常工作。Python 2.7-pymongo 2.6.3 已安装。还有 Python 2.4.6(64 位)和 3.4.0(64 位)。

这是 Python 脚本的一部分:

[...]

saveInDB:

    #BE connected to MongoDB client
    MDBClient = MongoClient()
    db = MDBClient ['test']
    collection = db['infosdb']

[...]

meteos = collectionMeteo.find()
for met in meteos:
  logging.info('DEBUG - Update with meteo ' + met['current_observation']['observation_location']['city'])
  result = collection.update_many( {"contract_name" : met['current_observation']['observation_location']['city']},
    {
        "$set": {"temp_c_meteo" : met['current_observation']['temp_c']}
    })

我得到了错误:==> [06/21/2016 10:51:03 AM] [警告]:'Collection' 对象不可调用。如果您打算在 'Collection' 对象上调用 'update_many' 方法,它会失败,因为不存在这样的方法。

我读到这个问题可能与某些 pymongo 版本有关(“不推荐使用保存和更新方法”,这就是我尝试使用 update_many 的原因)但不确定如何使这项工作?谢谢

4

2 回答 2

0

尝试使用属性样式访问而不是字典样式访问?

就像是

db = MDBClient.test
collection = db.infosdb
于 2016-06-21T15:12:33.460 回答
0

我是如何让它工作的:没有 update_many 但更新。

[...]

保存数据库:

#BE connected to MongoDB client
MDBClient = MongoClient()
db = MDBClient.test
collection = db.infosdb
collectionMeteo = db.meteo

[...]

        try:
            meteos = collectionMeteo.find()
            for met in meteos:

                status = collection.find({"contract_name" : met['current_observation']
                ['observation_location']['city']})
                for stat in status:

                    result = collection.update(  {"_id" : stat['_id']},
                            {
                                "$set": {"temp_c_meteo" : met['current_observation']['temp_c']
                                        }

                                                     )                                                  
于 2016-06-28T16:32:12.323 回答