一尘不染

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

node.js

我有以下模型:

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

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

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

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


阅读 171

收藏
2020-07-07

共1个答案

一尘不染

基本的尝试没什么错,但是这里唯一的澄清可能是普遍的误解,即您需要像
$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] } } })

因此,这意味着提供的“列表中的任何一个”都不存在于数组中。

2020-07-07