Dus*_*tin 13 python mongodb pymongo
使用PyMongo,我在列表中有一组dict,我想提交给我的MongoDB.列表中的某些项目是新条目,有些是要更新的.
例:
在服务器数据库:
[{"_id" : 1, "foo" : "bar}]
Run Code Online (Sandbox Code Playgroud)
要发送到数据库:
[{"_id" : 1, "foo" : "HELLO"}, {"_id" : 2, "Blah" : "Bloh"}]
Run Code Online (Sandbox Code Playgroud)
我目前正在使用以下内容来插入文档,但我将如何执行上述内容?任何帮助表示赞赏!
collection.insert(myDict)
Run Code Online (Sandbox Code Playgroud)
Rom*_*kar 22
使用upsert选项:
from pymongo import MongoClient
cl = MongoClient()
coll = cl["local"]["test2"]
data = [{"_id" : 1, "foo" : "HELLO"}, {"_id" : 2, "Blah" : "Bloh"}]
for d in data:
coll.update({'_id':d['_id']}, d, True)
Run Code Online (Sandbox Code Playgroud)
您也可以使用保存
import pymongo
con = pymongo.MongoClient()
coll = con.db_name.collection_name
docs = [{"_id" : 1, "foo" : "HELLO"}, {"_id" : 2, "Blah" : "Bloh"}]
for doc in docs:
coll.save(doc)
Run Code Online (Sandbox Code Playgroud)
对于 pymongo 3.0 及更高版本:
import pymongo
con = pymongo.MongoClient()
collection = con.db_name.collection_name
docs = [{"_id" : 1, "foo" : "HELLO"}, {"_id" : 2, "Blah" : "Bloh"}]
for d in docs:
collection.update_many({'_id':d['_id']}, d,True)
Run Code Online (Sandbox Code Playgroud)
参考: http: //api.mongodb.org/python/current/api/pymongo/collection.html
您必须使用upsert来更新(或插入)您的数据
from pymongo import MongoClient
client = MongoClient()
collection = client.my_database.my_collection
objects = [{"_id" : 1, "foo" : "HELLO"}, {"_id" : 2, "Blah" : "Bloh"}]
for obj in objects:
collection.replace_one({"_id": obj["_id"]}, obj, upsert=True)
Run Code Online (Sandbox Code Playgroud)
不推荐使用replace_one该update方法:
如果要使用批量更新:
from pymongo import ReplaceOne
update_objects = list()
for obj in objects:
update_objects.append(ReplaceOne( {'_id': obj['_id']}, obj, upsert=True))
collection.bulk_write(update_objects)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
43051 次 |
| 最近记录: |