2017-01-27 3 views
0

기본 쓰기 우려 옵션을 오버라이드 (override) : 난 단지 마스터와 복제 세트에서 문서를 삽입하기 위해 노력하고있어Pymongo는 : colleciton 업데이트를 w를 설정하면 다음과 같다 나는 pymongo 수집 및 쓰기 우려 옵션이

>>> col1.__class__.__bases__ 
(<class 'pymongo.collection.Collection'>,) 
>>> col1.write_concern 
{'wtimeout': 6000} 

사용 가능 (노예가 차단됨)

>>> pymongo.collection.Collection.update(col1, {'_id': '11'}, { "_id" : "11", "key": "test" }, upsert=True, fsync=False, w=2) 

그리고 pymongo는 영원히 정지합니다. w = 2로 설정하면 명시 적으로 기본 wtimeout 값을 0으로 대체하는 것 같습니다. wtimeout = 6000을 update으로 보내면 예상대로 예외가 발생합니다. 나는 뭔가를 놓치고 있습니까, 아니면이 방법으로 일하기로되어 있습니까?

답변

0

쓰기 문제 옵션을 "업데이트"로 전달하면 모두이 기본 쓰기 문제 옵션으로 바뀝니다. 나는 우리가 그것을 문서화했다고 생각하지 않는다.

>>> from pymongo import WriteConcern 
>>> collection = MongoClient().db.collection 
>>> coll2 = collection.with_options(
...  write_concern=WriteConcern(w=2, wtimeout=6000)) 
>>> oid = coll2.replace_one({'_id': '11'}, { "_id" : "11", "key": "test" }, 
          upsert=True) 

PyMongo 3 안내 : 참조 : 또한

http://api.mongodb.com/python/current/migrate-to-pymongo3.html#the-write-concern-attribute-is-immutable

를, 내가 권하고 싶습니다

에 관계없이, "업데이트"훨씬 더 명확 update_one 및 update_many 방법에 찬성되지 않습니다 예제에서와 같이 일반적인 방법으로 파이썬 객체를 사용합니다 : 클래스에서 메소드를 호출하고 인스턴스를 "self"로 전달하는 대신 객체를 인스턴스화하고 인스턴스에서 메소드를 호출하십시오.

+0

물론입니다. 방금 행동을 바꿀 수있는 재정의 된 방법을 사용하지 않는다는 것을 분명히했습니다. 답변 해주셔서 감사합니다! – YAPPO