2011-08-10 53 views
2

的MongoDB允許在一個關鍵的指標嵌入文檔的內部:mongoengine - 嵌入式文檔中的關鍵字索引?

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

有沒有辦法做到這一點使用mongoengine?

+0

你試過了嗎?在mongoengine中有一個ensure_index函數 – DrDee

+0

@DrDee我試圖在模式中強制執行此操作。我可以使用unique = True這個參數在任何領域做到這一點,但是嵌入式領域中的關鍵點呢? – mattexx

回答

2

您可以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" }) 
1
class Nested(EmbeddedDocument): 
    a = StringField(unique=True) 
    b = StringField() 

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

這就是全部。