查找包含不包含特定值的数组的文档

我有以下模型:

var PersonSchema = new Schema({ name: String, groups: [ {type: Schema.Types.ObjectId, ref: 'Group'} ], }); 

我正在寻找一个查询,检索不属于某个组的所有人(即人的组数组不包含指定组的ID)。

我正在考虑这样的事情,但我不确定是否正确:

Person.find({groups: {$nin: [group._id]})

你基本上试图做什么都没有问题,但也许这里唯一的解释是$in查询数组时,你需要像$nin$in这样的运算符的常见误解。

你真的需要在这里做一个基本的不平等与$ne匹配:

 Person.find({ "groups": { "$ne": group._id } }) 

“数组”操作符不是用于“数组目标”,而是提供一个“列表”条件以便于testing的方式。

 Person.find({ "groups": { "$nin": [oneId, twoId,threeId] } }) 

所以只需要使用普通的操作符来处理单个条件,并且保存$in$nin以便在一个值或一个列表中testing多个条件。 所以这只是另一种方式。

如果您确实需要传递参数列表,那么列表中的“none”与数组内容匹配,那么您使用$not操作符和$all操作符来反转逻辑:

 Person.find({ "groups": { "$not": { "$all": [oneId,twoId,threeId] } } }) 

这意味着数组中没有提供“没有列表”。