【问题标题】:How to store a null value in mongodb via mongoengine?如何通过 mongoengine 在 mongodb 中存储空值?
【发布时间】:2017-03-04 22:05:55
【问题描述】:

我正在使用 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值的存储?

【问题讨论】:

    标签: django mongodb django-models mongoengine


    【解决方案1】:

    我认为 default 参数是您正在寻找的。来自文档:

    类 mongoengine.base.fields.BaseField

    ...

    default –(可选)如果未设置任何值(或未设置该值),则为该字段的默认值。它可以是可调用的。

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

    【讨论】:

      【解决方案2】:

      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}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-19
        • 2012-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多