otm*_*ger 14 python insert mongodb pymongo
我在python中使用for循环来循环查询pymongo的查询结果.这是代码:
from pymongo import MongoClient
connection = MongoClient()
db = connection.Test
myDocs = db.Docs.find( { "geolocCountry" : { "$exists" : False } } )
for b in myDrives:
my_lat = b['TheGpsLog'][0]['latitude']
my_long = b['TheGpsLog'][0]['longitude']
myGeolocCountry = DoReverseGeocode(lat_start,long_start)
# Here I perform a reverse geocoding, it does not matter for this example.
# The important thing is: it returns a string, like 'US', 'UK', etc...
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何将变量myGeolocCountry插入geolocCountry现有文档(b)的非现有字段?
我试过了
b['geolocCountry'] = myGeolocCountry
Run Code Online (Sandbox Code Playgroud)
但它根本不起作用,它甚至不会产生错误.
谢谢
Mos*_*faR 19
您应该执行这样的更新查询:
db.Doc.update({"_id": b["_id"]}, {"$set": {"geolocCountry": myGeolocCountry}})
Run Code Online (Sandbox Code Playgroud)
对于pymongo > 3
db.Doc.update_one({"_id": b["_id"]}, {"$set": {"geolocCountry": myGeolocCountry}})
Run Code Online (Sandbox Code Playgroud)
在多次更新的情况下:
db.Doc.update_many({"geolocCountry": {"$exists": False}}, {"$set": {"geolocCountry": myGeolocCountry}})
Run Code Online (Sandbox Code Playgroud)
对于pymongo < 3
以上/以前的答案是正确的
db.Doc.update({"_id": b["_id"]}, {"$set": {"geolocCountry": myGeolocCountry}})
Run Code Online (Sandbox Code Playgroud)
在多次更新的情况下:
db.Doc.update({"geolocCountry": {"$exists": False}}, {"$set": {"geolocCountry": myGeolocCountry}})
Run Code Online (Sandbox Code Playgroud)
您必须使用该函数update()来更新集合中的记录。
通过更新,您可以指定一个查询(就像您在上面使用的那样,collection.find()但还提供了第二个 dict 来定义您希望如何更新在查询中找到的文档。例如:
db.Docs.update({"geolocCountry":{"$exists":False}}, {"$set": "geolocCountry": myGeolocCountry})
Run Code Online (Sandbox Code Playgroud)
查看 API 以了解其余参数。
| 归档时间: |
|
| 查看次数: |
20172 次 |
| 最近记录: |