如何通过mongoengine在mongodb中存储空值?

时间:2017-03-04 22:05:56

标签: django mongodb django-models mongoengine

我正在使用django和mongoengine,这就是让我感到困惑的一点:

如何实现{name:null}存储在mongoDB中。 通过 mongo shell 很容易实现,但是我无法通过mongoengine模型找到这样做的方法。

此外,

class Person(Document):
    name = StringField(null=True)

似乎 null 参数没有做任何事情。

1。型号:

class Person(Document):
    name = StringField()

用法:

person = Person()
person.save()

导致mongoDB:

{ "_id" : ObjectId("...") }

2。型号:

class Person(Document):
    name = StringField(null=True)

用法:

person = Person(name=None)
person.save()

导致mongoDB:

{ "_id" : ObjectId("...") }

3。型号:

class Person(Document):
    name = StringField(null=True, required=True)

用法:

person = Person(name=None)
person.save()

导致mongoDB:

ValidationError (Person:None) (Field is required: ['name'])

问题:

null 参数的作用是什么?

如何通过mongoengine在 mongoDB 中存储 null 值?

2 个答案:

答案 0 :(得分:0)

我认为您正在寻找default参数。从文档中:

  

mongoengine.base.fields.BaseField类

     

...

     

默认值–(可选)如果未设置任何值(或未设置该值)的默认值。它可以被调用。

http://docs.mongoengine.org/apireference.html#fields

答案 1 :(得分:0)

null参数实际上可以解决问题。

参见下文:

class Person(Document):
    name = StringField(null=True)

person = Person().save()

# check raw object that got stored
pymongo_coll = Person._get_collection()
assert pymongo_coll.find_one() == {'_id': person.id, 'name': None}