Mongoose - 查找包含给定子集的所有数组属性文档?

4

我有一个(简化的)模型,基于以下架构:

schema = mongoose.Schema({
    foo: { type: String },
    bars: [{ type: String }]
});
model = mongoose.model ('model', schema);

我希望创建一个API,返回所有包含以逗号分隔列表形式提供的“bars”的文档。因此,我有以下内容:
exports.findByBars = function (req, res) {
  var barsToFind = req.body.bars.split(',');
  // find the matching document
};

Mongoose是否提供此API,或者我可以传递查询参数到Model#find以获得此功能?如果仅当文档的bar属性包含barsToFind数组中的所有值时才返回该文档。请注意保留HTML标签。
1个回答

5

有一些方法可以构建查询来实现这一点,具体取决于您的MongoDB服务器版本。所以根据您的代码:

对于MongoDB 2.6及以上版本,请使用 $all 操作符:

model.find({
    "bars": { "$all": barsToFind }
},

虽然对于之前的版本MongoDB也存在该运算符,但其行为不同,因此您实际上需要生成一个 $and 语句来明确匹配每个条目:

var andBars = [];

barsToFind.forEach(function(bar) {
    andBars.push({ "bars": bar })
});

model.find({
    "$and": andBars
},

这两种方法都可以确保只匹配包含您指定的数组中所有条目的文档,只是MongoDB 2.6可用的语法更加简洁。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接