这是我的文件:
{
title:"Happy thanksgiving",
body: "come over for dinner",
blocked:[
{user:333, name:'john'},
{user:994, name:'jessica'},
{user:11, name: 'matt'},
]
}
查找“阻止”中没有用户11的所有文档的查询是什么?
答案 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]}})
这对我有用。