2012-03-05 17 views
7

np ..Mongoengine ... zapytanie o coś nie w ListField?

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

W tym przypadku, możemy dowiedzieć się wartość na liście tagów takiego.

Page.objects(tags='coding') 

jeśli znaczniki są jak [ „kodowania”, „x”, „y”], a następnie dokument zostanie dopasowany ...

ale pytanie brzmi jak mogę znaleźć wartość nie na liście.

mój niepoprawny kod byłby ..

Page.objects(tags!='coding') 

lub

Page.objects(tags__not = 'coding') 

lub

Page.objects(tags__not__in = 'coding') 

ale .. oni po prostu nie działa ..

jak mogę zapytać o dokument, który nie ma danej wartości w polu listy?

Odpowiedz

15

Aby znaleźć żadnych stron, które nie mają znaczniki kodowania użyć operatora $nin:

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

Dzięki! Ross !! Dzięki!! dużo!! Ross jesteś geniuszem !! – Anderson

1

pominąłbym używając wbudowany w składni Mongo na tej jednej i po prostu użyć surowego zapytanie:

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

Gdy zapytanie staje się bardziej skomplikowane, będziesz chciał je skonfigurować tak jak to.

Powiązane problemy