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

TIM*_*MEX 46 database mongodb

这是我的文件:

{ 
    title:"Happy thanksgiving",
    body: "come over for dinner",
    blocked:[
       {user:333, name:'john'},
       {user:994, name:'jessica'},
       {user:11, name: 'matt'},
    ]
}
Run Code Online (Sandbox Code Playgroud)

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

Jus*_*ins 72

您可以使用$ in$ nin表示"不在"

示例......

> db.people.find({ crowd : { $nin: ["cool"] }});
Run Code Online (Sandbox Code Playgroud)

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

  • 如果你只有一个元素,你也可以使用$ ne.如果要在嵌套结构(而不​​是数组)中查找元素,可以检查键的存在/不存在.这方面的一个例子是db.myCollection.find({'blockedPeople.george':{$ exists:false}}); (2认同)

Zug*_*alt 31

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

db.myCollection.find({'blocked.user': {$ne: 11}});
Run Code Online (Sandbox Code Playgroud)

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

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


小智 6

请尝试以下操作:

db.stack.find({"blocked.user":{$nin:[11]}})
Run Code Online (Sandbox Code Playgroud)

这对我有用。