我有以下型号:
var PersonSchema = new Schema({
name: String,
groups: [
{type: Schema.Types.ObjectId, ref: 'Group'}
],
});
我正在寻找一个查询来检索不属于某个组的所有人员(即人员的组数组不包含指定组的 ID)。
我正在考虑这样的事情,但我不确定它是否正确:
Person.find({groups: {$nin: [group._id]})
最佳答案
您的尝试基本上没有问题,但也许这里唯一的澄清是您需要像 $nin
这样的运算符的常见误解。或 $in
查询数组时。
你还需要在这里做一个基本的不等式匹配 $ne
:
Person.find({ "groups": { "$ne": group._id } })
“数组”运算符不是用于“数组目标”,而是用于提供条件“列表”以方便的形式进行测试。
Person.find({ "groups": { "$nin": [oneId, twoId,threeId] } })
因此,只需对单个条件使用普通运算符,并将 $in
和 $nin
保存在要针对单个值或一个值测试多个条件的地方列表。所以它只是反过来。
如果您确实需要传递参数的“列表”,其中提供的列表中的“无”与数组的内容匹配,则使用 $not
反转逻辑运算符和 $all
运营商:
Person.find({ "groups": { "$not": { "$all": [oneId,twoId,threeId] } } })
这意味着提供的“列表中的任何一个”都不存在于数组中。
关于javascript - 查找包含不包含特定值的数组的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26481326/