我有以下型号:
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] } } })
这意味着数组中存在“没有列表”.