Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python mongoengine-对嵌入文档中的键进行索引?_Python_Mongodb_Mongoengine - Fatal编程技术网

Python mongoengine-对嵌入文档中的键进行索引?

Python mongoengine-对嵌入文档中的键进行索引?,python,mongodb,mongoengine,Python,Mongodb,Mongoengine,MongoDB允许在嵌入文档内部的键上建立索引: db.things.ensureIndex({"address.city": 1}) 有没有办法使用mongoengine执行此操作?您可以使用unique=True在嵌入式文档上指定一个字段: >>> class Nested(EmbeddedDocument): ... a = StringField(unique=True) ... b = StringField() ... >>>

MongoDB允许在嵌入文档内部的键上建立索引:

db.things.ensureIndex({"address.city": 1})

有没有办法使用mongoengine执行此操作?

您可以使用
unique=True
在嵌入式文档上指定一个字段:

>>> class Nested(EmbeddedDocument):
...     a = StringField(unique=True)
...     b = StringField()
... 
>>> class Outer(Document):
...     inner = EmbeddedDocumentField(Nested)
...     c = StringField()
... 
>>> o = Outer()
>>> o.c = 'abc'
>>> o.inner = Nested(a='a', b='b')
>>> o.save()
>>> o2 = Outer()
>>> o2.c = 'abc'
>>> o2.inner = Nested(a='a', b='B')
>>> o2.save()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "mongoengine/document.py", line 176, in save
    raise OperationError(message % unicode(err))
mongoengine.queryset.OperationError: Tried to save duplicate unique keys (E11000 duplicate key error index: test.outer.$inner.a_1  dup key: { : "a" })
类嵌套(EmbeddedDocument): ... a=字符串字段(唯一=真) ... b=StringField() ... >>>类别(文件): ... 内部=嵌入的文档字段(嵌套) ... c=StringField() ... >>>o=外部() >>>o.c=‘abc’ >>>o.inner=Nested(a='a',b='b') >>>o.保存() >>>o2=外部() >>>o2.c='abc' >>>o2.inner=嵌套(a='a',b='b') >>>o2.save() 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 保存中第176行的文件“mongoengine/document.py” 提升操作错误(消息%unicode(错误)) mongoengine.queryset.OperationError:尝试保存重复的唯一键(E11000重复键错误索引:test.outer.$inner.a_1 dup key:{:“a”})
就这些。

你试过了吗?中有一个sure_index函数mongoengine@DrDee我试图在模式中强制执行这一点。我可以使用参数unique=True对任何字段执行此操作,但是嵌入字段中的键呢?
class Nested(EmbeddedDocument):
    a = StringField(unique=True)
    b = StringField()

class Outer(Document):
    inner = EmbeddedDocumentField(Nested)
    c = StringField()
    meta = {"indexes": ['inner.a']}