【问题标题】:Mongoengine - how to atomically update a dictionary?Mongoengine - 如何以原子方式更新字典?
【发布时间】:2013-04-19 18:02:20
【问题描述】:

我有一个看起来像这样的模型:

class TestDoc(Document):
    name = StringField()
    friends = ListField(StringField())
    address_book = DictField()

我希望在好友列表发生变化时自动更新地址簿字段。如何在原子操作中修改这两个字段?我在文档中找不到任何修饰符:

https://mongoengine-odm.readthedocs.org/en/latest/guide/querying.html#atomic-updates

对字典进行原子更新。 谢谢!

【问题讨论】:

    标签: dictionary updates mongoengine


    【解决方案1】:

    当您每次从friends 字段中执行$push$pull 时,您还将在同一更新中修改address_book,例如:

    TestDoc(name="Sue", friends=["Bob", "Sarah"], 
            address_book={"Bob": "1 the farm", "Sarah": "Owl house"}).save()
    
    TestDoc.objects(name="Sue").update(pull__friends="Bob", 
                                       unset__address_book__Bob=1)
    

    【讨论】:

    • 哦,我明白了:所以您使用 __...访问名为 Bob 的字典元素...啊,我早该想到的!再次感谢罗斯!
    • Ross,我还有一个问题:如果 address_book 字典字段如下所示: address_book={"Mary" : {"parents_address" : ["12 OceanWay", "13 Long Rd"]} ,“鲍勃”:{“work_address”:[“45 CentralRd”]}}?我如何以原子方式更新例如“12 OceanWay”以将其更改为“13 OceanWay”?
    猜你喜欢
    • 2014-12-06
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多