我在Mongoose中定义了一个组文档:
var GroupSchema = new Schema({
name: String,
sections: [{type: ObjectId}]
});
可见,group包含一系列部分。我还有另一个objectId数组,名为 archived_sections
我想找到至少有一个部分不在archived_sections数组中的所有组。怎么做?
我试图像这样使用$ nin运算符:
Group.find({ sections: { $nin: archived_sections }).exec(function(err, groups){
res.send(groups);
});
但是这只给了我那些其section字段包含一个数组的组,其中NO元素与数组archived_sections中的元素匹配。
我想找到所有在最少一个部分不在archived_sections数组中的组。怎么实现呢?请帮忙
答案 0 :(得分:1)
您可以将$nin
包裹在$elemMatch
运算符中,以便将$nin
分别应用于sections
的每个元素而不是元素集合一个小组:
Group.find({ sections: { $elemMatch: { $nin: archived_sections } } })
.exec(function(err, groups){
res.send(groups);
}
);
如果至少有一个元素满足$elemMatch
查询,则doc匹配。