Django rest framework mongoengine 使用默认值更新新字段
Django rest framework mongoengine update new field with default value
如果我想添加一个具有默认值的新字段,我在创建几个文档后使用 Django rest 框架 mongoengine。有什么办法可以做到这一点,否则我需要用一些自定义功能进行更新。
注意:我想使用具有新字段名称的过滤器来获取数据。那个时候字段不存在。所以我越来越空了。
据我了解,您在插入文档后修改 MongoEngine 模型(添加具有默认值的字段)。在那个新字段上过滤 collection 时遇到问题。
基本上你有以下困惑的情况:
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')
如果您对文档结构做了更多 important/complicated 更改,那么最好的选择是开始使用 pymongo。
coll = TestPerson._get_collection()
coll.update({}, {'$set': {'name': 'John'}})
如果我想添加一个具有默认值的新字段,我在创建几个文档后使用 Django rest 框架 mongoengine。有什么办法可以做到这一点,否则我需要用一些自定义功能进行更新。
注意:我想使用具有新字段名称的过滤器来获取数据。那个时候字段不存在。所以我越来越空了。
据我了解,您在插入文档后修改 MongoEngine 模型(添加具有默认值的字段)。在那个新字段上过滤 collection 时遇到问题。
基本上你有以下困惑的情况:
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')
如果您对文档结构做了更多 important/complicated 更改,那么最好的选择是开始使用 pymongo。
coll = TestPerson._get_collection()
coll.update({}, {'$set': {'name': 'John'}})