如何在Mongo中执行“NOT IN”查询?

时间:2011-06-17 20:47:12

标签: mongodb database

这是我的文件:

{ 
    title:"Happy thanksgiving",
    body: "come over for dinner",
    blocked:[
       {user:333, name:'john'},
       {user:994, name:'jessica'},
       {user:11, name: 'matt'},
    ]
}

查找“阻止”中没有用户11的所有文档的查询是什么?

4 个答案:

答案 0 :(得分:61)

您可以将 $ in $ nin 用于“not in”

示例......

> db.people.find({ crowd : { $nin: ["cool"] }});

我在这里添加了更多示例:http://learnmongo.com/posts/being-part-of-the-in-crowd/

答案 1 :(得分:27)

由于您要与单个值进行比较,因此您的示例实际上不需要NOT IN操作。这是因为Mongo会将其搜索条件应用于数组子文档的每个元素。您可以使用NOT EQUALS运算符$ ne来获取您想要的值,因为它在搜索中无法显示的值:

db.myCollection.find({'blocked.user': {$ne: 11}});

但是如果你有许多它不能相等的东西,那就是你要使用NOT IN运算符,即$ nin。它需要一组在搜索中无法显示的值:

db.myCollection.find({'blocked.user': {$nin: [11, 12, 13]}});

答案 2 :(得分:2)

请参阅http://docs.mongodb.org/manual/reference/operator/query/nin/#op._S_nin

db.inventory.find( { qty: { $nin: [ 5, 15 ] } } )
  

此查询将   选择清单集合中qty字段所在的所有文档   值不等于5或15.所选文件将包括   那些不包含数量字段的文件。

     

如果该字段包含数组,则$ nin运算符选择   其字段包含没有元素等于值的数组的文档   在指定的数组中(例如,等)。

答案 3 :(得分:2)

尝试以下方法:

db.stack.find({"blocked.user":{$nin:[11]}})

这对我有用。