그래서 주로 Mongoengine 질문이지만이 문제는 근본적인 pymongo 레이어에있는 것 같습니다. 그래서 나는 둘 다 언급해야한다고 생각합니다. 기본적으로 내가이 편집과 같은 모델이 : 클래스의 자세한 내용을 표시하도록 업데이트를Mongoengine/Pymongo의 사전에서 키를 원자 적으로 제거하는 방법은 무엇입니까?
class MyModel(Document):
dictField = DictField()
class PermHolder(Document):
meta = {'allow_inheritance': True}
....
class ValClass(PermHolder):
....
을 정의 내 코드에서 나는 원자 업데이트를 사용하여 그 사전을 조작하기 위해 노력하고있어 (내가 전에 이상한 경쟁 조건의 문제가 있었다 정상적인 방법을 시도하고 저장할 때). 키는 변수가 있기 때문에, 나는 제거하려고 할 때 업데이트 기능으로 내 인수로 두 번째 통화
modelObject = MyModel.objects.get(id=blah)
valVar = ValClass.objects.get(id=blah)
# This works at adding the binding modelObject[keyVar] = valVar
modelObject.update(**{'set__dictField__' + keyVar: valVar })
...
# Trying to remove the binding later on
modelObject.update(**{'unset__dictField__' + keyVar: valVar })
그래서를 kwargs로를 사용하는 나에게 이상한 오류
Cannot encode object: <ValClass: 51e94b55bc616310e5e4f3fb>
를 제공했다 set 명령이 작동했기 때문입니다. 이것을 제거하는 또 다른 방법이 있으며 잘못된 구문을 사용하고 있습니까? valVar
만약
이 판막 무엇입니까 - 그것은 인코딩 할 수없는 -이 클래스의 인스턴스입니다? 전체 테스트 케이스를 제작할 수 있습니까? – Ross
전체 테스트 케이스를 포함하도록 업데이트했습니다. 그것은 내가 말한 그대로의 것입니다 –