【问题标题】:Django rest framework mongoengine update new field with default valueDjango rest框架mongoengine使用默认值更新新字段
【发布时间】:2023-03-30 20:45:01
【问题描述】:

如果我想添加一个具有默认值的新字段,我在创建几个文档后使用 Django rest 框架 mongoengine。有什么办法可以做到这一点,否则我需要用很少的自定义函数来更新。

注意:我想使用具有新字段名称的过滤器获取数据。那个时候领域不存在。所以我越来越空了。

【问题讨论】:

    标签: django-rest-framework mongoengine restframeworkmongoengine


    【解决方案1】:

    据我了解,您正在插入文档后修改 MongoEngine 模型(添加具有默认值的字段)。而且您在过滤该新字段上的集合时遇到问题。

    基本上你有以下令人困惑的情况:

    from mongoengine import *
    
    conn = connect()
    
    conn.test.test_person.insert({'age': 5})    # Simulate an old object
    
    class TestPerson(Document):
        name = StringField(default='John')    # the new field
        age = IntField()
    
    person = TestPerson.objects().first()
    
    assert person.name == "John" 
    assert Test.objects(name='John').count() == 0
    

    实际上,当底层pymongo文档的字段为空时,MongoEngine会动态应用默认值,但在过滤时并没有考虑到这一点。

    保证过滤正常工作的唯一可靠方法是迁移现有文档。 如果它只添加一个具有默认值的字段,您可以使用 MongoEngine 执行此操作:TestPerson.objects().update(name='John')

    如果您对文档结构进行了更重要/更复杂的更改,那么最好的选择是使用 pymongo。

    coll = TestPerson._get_collection()
    coll.update({}, {'$set': {'name': 'John'}})
    

    【讨论】:

    • 长话短说,是的:)
    猜你喜欢
    • 2020-09-29
    • 1970-01-01
    • 1970-01-01
    • 2015-12-15
    • 2014-07-07
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多