是否可以动态添加结构中不存在的字段?

时间:2013-08-29 19:49:12

标签: python mongodb mongokit

我正在尝试mongokit,我遇到了问题。我认为可以动态添加模式中不存在的字段,但显然我无法保存文档。

代码如下:

from mongokit import *

connection = Connection()

@connection.register
class Test(Document):
    structure = {'title': unicode, 'body': unicode}

在python shell上:

test = connection.testdb.testcol.Test()
test['foo'] = u'bar'
test['title'] = u'my title'
test['body'] = u'my body'
test.save()

这给了我一个

StructureError: unknown fields ['foo'] in Test

我有一个应用程序,虽然我有一个始终存在的字段核心,我无法预测事先需要哪些新字段。基本上,在这种情况下,由客户端来插入它认为必要的字段。我会收到他发送的任何东西,做我的东西,然后将它们存放在mongodb中。

但是仍然存在所有文档共有的核心字段,因此输入和验证它们会很好。

有没有办法用mongokit来解决这个问题?

1 个答案:

答案 0 :(得分:1)

根据MongoKit structure documentation,如果您使用Schemaless Structure功能,则可以使用可选字段。

  

从版本0.7开始,MongoKit允许您保存部分结构化文档。

因此,如果你像这样设置你的类,它应该工作:

from mongokit import *
class Test(Document):
    use_schemaless = True
    structure = {'title': unicode, 'body': unicode}
    required_fields = [ 'title', 'body' ]

这将需要titlebody,但应允许任何其他字段存在。根据文件:

  

只有在缺少必填字段时,MongoKit才会引发异常