Mongodb:查找至少有一个数组元素不匹配的所有文档?

时间:2015-02-25 20:33:27

标签: arrays node.js mongodb mongoose

我在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数组中的组。怎么实现呢?请帮忙

1 个答案:

答案 0 :(得分:1)

您可以将$nin包裹在$elemMatch运算符中,以便将$nin分别应用于sections的每个元素而不是元素集合一个小组:

Group.find({ sections: { $elemMatch: { $nin: archived_sections } } })
    .exec(function(err, groups){
        res.send(groups);
    }
);

如果至少有一个元素满足$elemMatch查询,则doc匹配。