2012-03-05 31 views
7

ví dụ ..Mongoengine ... truy vấn cái gì đó không có trong một ListField?

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

Trong trường hợp này, chúng ta có thể tìm ra một giá trị trong danh sách thẻ như thế này.

Page.objects(tags='coding') 

nếu thẻ giống như [ 'mã hóa', 'x', 'y'], sau đó tài liệu sẽ được xuất hiện ...

nhưng câu hỏi của tôi là làm thế nào tôi có thể tìm hiểu các giá trị không trong danh sách.

mã không chính xác của tôi sẽ là ..

Page.objects(tags!='coding') 

hoặc

Page.objects(tags__not = 'coding') 

hoặc

Page.objects(tags__not__in = 'coding') 

nhưng .. họ không chỉ đơn giản là làm việc ..

làm thế nào tôi có thể truy vấn một tài liệu mà không có một giá trị nhất định trong một ListField?

Trả lời

15

Để tìm bất kỳ trang nào mà không có các thẻ mã hóa sử dụng $nin điều hành:

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

Cảm ơn !!!! Ross !! Cảm ơn!! rất nhiều!! Ross bạn là thiên tài !! – Anderson

1

tôi sẽ bỏ qua bằng cách sử dụng xây dựng trong cú pháp Mongo trên này và chỉ sử dụng một truy vấn liệu:

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

Khi truy vấn trở nên phức tạp hơn, bạn sẽ muốn bạn thiết lập như thế này.

Các vấn đề liên quan