2013-08-22 39 views
9

Sử dụng PyMongo, tôi có một bộ dict trong danh sách mà tôi muốn gửi cho MongoDB của mình. Một số mục trong danh sách là các mục nhập mới và một số mục cần cập nhật.Python - Pymongo Chèn và Cập nhật Tài liệu

Ví dụ:

Trên Server Cơ sở dữ liệu:

[{"_id" : 1, "foo" : "bar}] 

Để gửi tới cơ sở dữ liệu:

[{"_id" : 1, "foo" : "HELLO"}, {"_id" : 2, "Blah" : "Bloh"}] 

Tôi hiện đang sử dụng sau đây để chèn văn bản, nhưng làm thế nào tôi sẽ làm một cái gì đó như đã nêu ở trên? Bất kỳ trợ giúp được đánh giá cao!

collection.insert(myDict) 

Trả lời

12

Sử dụng upsert tùy chọn:

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) 
+2

Có cách nào để thực hiện điều này với một cuộc gọi API không? Một cái gì đó giống như một bản cập nhật "số lượng lớn", cho hiệu quả tốt hơn. – John

+0

@John Bạn đã tìm ra cách để làm điều này với số lượng lớn? một cái gì đó tương tự như insert_many – Sam

6

Bạn cũng có thể sử dụng save

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) 
+1

_From Docs: _ ** DEPRECATED ** - Sử dụng ['insert_one()'] (http://api.mongodb.com/python/current/api/pymongo/collection.html#pymongo.collection. Thay vào đó, hãy chọn Collection.insert_one) hoặc ['replace_one()'] (http://api.mongodb.com/python/current/api/pymongo/collection.html#pymongo.collection.Collection.replace_one). – luckydonald

Các vấn đề liên quan