使用MongoEngine动态文档将None保存到MongoDB中

时间:2016-06-08 20:26:23

标签: python mongodb pymongo mongoengine

我正在尝试将MongoEngine文档保存为动态文档。示例代码如下:

class Small(mongoengine.Document):
    var_1 = mongoengine.IntField(db_field="var_1")
    var_2 = mongoengine.IntField(db_field="var_2")

class Main(mongoengine.DynamicDocument):
    timeseries = mongoengine.ListField(mongoengine.EmbeddedDocumentField('Small'),
                                       db_field="timeseries")

    def sample_insert():
        input = [(2, 4), (2, 6), (3, None), (4, None)]

        to_insert = [Small(var_1=i[0], var_2=i[1]) for i in input]

        self.timeseries = to_insert
        self.save()

当要保存的一个或多个值为None时,会出现问题。在这种情况下,会生成以下错误:

mongoengine.errors.ValidationError: ValidationError (Data:55c0d57d1853bcad5c17b1f7) (var_1.Field is required)

我可以将None值设置为0,但这不是一个好的解决方案,因为我无法再区分合法的0值和不存在的值。

我喜欢做的是能够将这些None值作为'null'条目插入MongoDB。

这可能吗?

1 个答案:

答案 0 :(得分:0)

运行代码没问题。插入的文档如下所示:

"timeseries" : [{ "var_1" : 2, "var_2" : 4 }, { "var_1" : 2, "var_2" : 6 }, { "var_1" : 3 }, { "var_1" : 4 }]

在我运行代码之前,我必须将self作为sample_insert函数的参数。