我有以下模型:
var PersonSchema = new Schema({ name: String, groups: [ {type: Schema.Types.ObjectId, ref: 'Group'} ], });
我正在寻找一个查询,该查询检索不属于某个特定组的所有人员(即,人员的组数组不包含指定组的ID)。
我在考虑这样的事情,但是我不确定它是正确的:
Person.find({groups: {$nin: [group._id]})
基本的尝试没什么错,但是这里唯一的澄清可能是普遍的误解,即您需要像 $nin 或 $in 查询数组时这样的运算符。
$nin
$in
另外,您真的需要在这里做一个基本的不等式匹配 $ne :
$ne
Person.find({ "groups": { "$ne": group._id } })
“数组”运算符不用于“数组目标”,而是用于提供条件的“列表”以方便的形式进行测试。
Person.find({ "groups": { "$nin": [oneId, twoId,threeId] } })
因此,只需对单个条件使用普通运算符,然后将其保存$in并$nin用于要针对单个值或列表测试多个条件的位置。因此,反之亦然。
如果确实需要传递参数的“列表”,其中所提供列表中的参数“没有”与数组的内容匹配,则可以使用 $not 运算符和 $all 运算符反转逻辑:
$not
$all
Person.find({ "groups": { "$not": { "$all": [oneId,twoId,threeId] } } })
因此,这意味着提供的“列表中的任何一个”都不存在于数组中。