2014-01-07 2 views
4

나는 짹짹 모음이 있습니다. 이 컬렉션에 트윗 목록을 삽입하고 싶습니다. 새 목록에는 일부 중복 트윗이있을 수도 있습니다. 중복 트윗이 작성되지 않도록하고 싶습니다.하지만 나머지는 모두 수행합니다. 이를 위해 다음 코드를 사용하고 있습니다.Pymongo w = 1 with continue_on_error

mongoPayload = <list of tweets> 
committedTweetIDs = db.tweets.insert(mongoPayload, w=1, continue_on_error=True) 
print "%d documents committed" % len(committedTweetIDs) 

위의 코드 스 니펫이 작동해야합니다. 그러나, 내가 얻는 동작은 두 번째 줄 DuplicateKeyError가 생성된다는 것입니다. 이후로 무슨 일이 일어나고 있는지 모르겠다. 나는 continue_on_error를 언급했다.

내가 원하는 것은 Mongo가 모든 비 중복 문서를 커밋하고 일지에 쓰여진 모든 문서의 트윗 ID (승인)로 돌아 오는 것입니다.

+0

그 두 번째 라인은 유효한 파이썬이 아닙니다. 키워드 인수 다음에 위치 인수를 넣을 수 없습니다 ('SyntaxError'). 선이 실제로 어떻게 생겼는지 보여줄 수 있습니까? 'continue_on_error = some_variable'과 같은 일을한다면'some_variable'이 맞습니까? – dirn

+0

죄송합니다, 예. 'continue_on_error = True'가 있어야합니다. 내 실수. – VaidAbhishek

답변

6

심지어 continue_on_error=True이 있어도 MongoDB에서 중복 문서 _id을 삽입하려고 시도하면 PyMongo가 DuplicateKeyError를 발생시킵니다. 그러나 continue_on_error=True을 사용하는 경우 서버 은 첫 번째 오류에 대한 작업을 중단하는 대신 모든 문서를 목록에 삽입하려고 시도했습니다. 예외의 error_document 속성은 의 마지막_id이 문서 목록에 있음을 알려줍니다.

일괄 삽입 할 때 얼마나 많은 문서가 성공하고 합계가 실패했는지 확인할 수 없습니다. 우리가 대량 쓰기 작업을 구현할 때 MongoDB 2.6 and PyMongo 2.7 will address this in the next release.

+0

감사합니다. 예, 2.6의 릴리즈 노트를 보았습니다. 사용자가 벌크 삽입물과 실패 조건을 훨씬 잘 제어 할 수 있다고 썼습니다. – VaidAbhishek