2011-08-10 7 views
2

MongoDB permet un index sur une clé à l'intérieur d'un document incorporé:mongoengine - index sur une clé à l'intérieur d'un document incorporé?

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

Est-il possible de le faire en utilisant mongoengine?

+0

l'avez-vous essayé? il existe une fonction ensure_index dans mongoengine – DrDee

+0

@DrDee J'essaye d'appliquer ceci dans le schéma. Je peux le faire avec n'importe quel champ en utilisant l'argument unique = True, mais qu'en est-il d'une clé dans un champ intégré? – mattexx

Répondre

2

Vous pouvez spécifier un champ sur un document incorporé avec 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']} 

C'est tout.

Questions connexes