我有一个查询,
SomeCollection.collection.find(:$or => [{tags:'cool'},{tags:'awesome'},{tags:'neat'},...])
我想修改相反的集合。所以所有的元素除了在前面的语句中找到的元素。在这个例子中,我想要所有不是tags:'cool' || tags:'awesome' || tags:'neat' || ...
的结果。
我尝试了SomeCollection.collection.find(:$not => {:$or => [{tags:'cool'},{tags:'awesome'},{tags:'neat'},...]})
,它给出了语法错误。我也在考虑SomeCollection.collection.find(:$and => [{tags:{:$ne => 'cool'}}, {tags:{:$ne => 'awesome'}}, {tags:{:$ne => 'neat'}}])
,它是显式的逆,给了我正确的答案。有没有一种简便的方法来得到逆集合?
您可以在查询中使用$ne
SomeCollection.collection.find($or : [ {tags: {$ne:'cool}}, ..]
由于您比较的是同一字段的值,因此可以使用偶数$nin。查询现在看起来像这样,
SomeCollection.collection.find($or : [ {tags : {$nin : ['cool','awesome',..]} .. ]