mongoengine - 嵌入式文档中的关键字索引?

问题描述:

的MongoDB允许在一个关键的指标嵌入文档的内部:mongoengine - 嵌入式文档中的关键字索引?

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

有没有办法做到这一点使用mongoengine?

+0

你试过了吗?在mongoengine中有一个ensure_index函数 – DrDee

+0

@DrDee我试图在模式中强制执行此操作。我可以使用unique = True这个参数在任何领域做到这一点,但是嵌入式领域中的关键点呢? – mattexx

您可以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" }) 

class Nested(EmbeddedDocument): 
    a = StringField(unique=True) 
    b = StringField() 

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

这就是全部。