查找包含不包含特定值的数组的文档
我有以下模型:
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] } } })
这意味着数组中没有提供“没有列表”。