2013-06-21 3 views
0

원격 MongoDB 인스턴스에 문서 세트를 삽입해야합니다.이 문서 중 일부는 이미 인스턴스에 _id 매개 변수가있을 수 있습니다. 나는 MongoDB가 그러한 문서를 무시하고 나머지를 저지하기를 원한다.MongoDB Bulk 자동 업데이트

현재 PyMongo의 삽입 메소드의 기본 동작은 원격 서버에서 발견 된 각각의 중복 문서에 대해 DuplicateError Exception을 반환합니다. 나는이 행동을 더 많은 불로 가라 앉히고 기능성을 잊고 싶다.

누구든지이 작업을 수행하는 방법을 알고 있습니다. 그것은 상당한 것입니다.

+0

http://stackoverflow.com/questions/2801008/mongodb-insert-if을 설정할 수있는 -not-exists 그 Q를 보셨나요? – WiredPrairie

답변

1

중복 키 오류가있는 곳의 경우 continue_on_errorflag을 설정해야합니다.

이 플래그를 사용하면 오류가 발생한 경우에도 삽입이 계속됩니다. 마지막 오류는 getLastError에 의해 다시보고 될 것이다 - 당신이 잡을 또는 화재를 원하는 잊지 경우 write concern 0으로

from pymongo import * 
client = MongoClient() 
coll = client.test.test 
coll.drop() 

# Add a test document 
coll.save({'_id': 1, 'hello': 'world'}) 
print(coll.count()) 

# Without the flag - Boom 
coll.insert([{"_id": 1, "hello": "world"}, 
      {"_id": 2, "Howdy": "Worldy"}]) 
print(coll.count()) 

# With a write concern of 0 - no error but not saved. 
coll.insert([{"_id": 1, "hello": "world"}, 
      {"_id": 2, "Howdy": "Worldy"}], w=0) 
print(coll.count()) 

# Will error but will insert as well 
coll.insert([{"_id": 1, "hello": "world"}, 
      {"_id": 2, "Howdy": "Worldy"}], continue_on_error=True) 
print(coll.count()) 

# With a continue_on_error and write concern of 0 - will only error if theres 
# some socket or network error 
coll.insert([{"_id": 1, "hello": "world"}, 
      {"_id": 2, "Howdy": "Worldy"}, 
      {"_id": 3, "Hi": "World"}], w=0, continue_on_error=True) 
print(coll.count()) 
+0

감사. 나는 나 자신도 그것을 계산했다. 다시 확인해 주셔서 감사합니다. – VaidAbhishek