2012-03-05 8 views
7

por ejemplo ..Mongoengine ... pregunta algo que no está en un ListField?

class Page(Document) 
    tags = ListField(StringField()) 

En este caso, podemos encontrar un valor en la lista de etiquetas como este.

Page.objects(tags='coding') 

si las etiquetas son como [ 'codificación', 'x', 'y'], el documento será igualado ...

pero mi pregunta es ¿cómo puedo averiguar el valor no en el listfield.

mi código incorrecto sería ..

Page.objects(tags!='coding') 

o

Page.objects(tags__not = 'coding') 

o

Page.objects(tags__not__in = 'coding') 

pero .. que simplemente no funcionan ..

¿cómo puedo consultar un documento que no tiene un valor determinado en un ListField?

Respuesta

15

Para encontrar las páginas que no tienen las etiquetas de codificación usar el operador $nin:

Page.objects(tags__nin=['coding']) 
+3

Gracias !!!! ¡Ross! ¡¡Gracias!! ¡¡mucho!! Ross eres un genio! – Anderson

1

me saltaría el uso de la acumulación en la sintaxis mongo en este caso y sólo tiene que utilizar una consulta prima:

Page.objects(__raw__={"tags" : {"$ne" : ['coding']}}) 

A medida que la consulta se vuelve más complicada, va a desear configurarla de esta manera.

Cuestiones relacionadas