Mongoose – 查找数组属性包含给定子集的所有文档?
我有一个基于以下模式的(简化)模型:
schema = mongoose.Schema({ foo: { type: String }, bars: [{ type: String }] }); model = mongoose.model ('model', schema);
我想创build一个API来返回所有包含所有以逗号分隔列表提供的“酒吧”的文档。 所以我有:
exports.findByBars = function (req, res) { var barsToFind = req.body.bars.split(','); // find the matching document };
Mongoose是否为此提供了一个API,还是有一个查询参数可以传递给Model#find来获得这个function? 如果bar属性包含barsToFind
数组中的所有值,我只想要返回一个文档。
有办法来构build你的查询来做到这一点,这些方法是不同的,取决于你的mongodb服务器版本。 所以从你的代码开始:
对于MongoDB 2.6及更高版本,使用$all
操作符:
model.find({ "bars": { "$all": barsToFind } },
虽然运算符确实存在于以前的版本中,但它的行为不同,所以您实际上需要生成一个$and
statement以明确地匹配每个条目:
var andBars = []; barsToFind.forEach(function(bar) { andBars.push({ "bars": bar }) }); model.find({ "$and": andBars },
两者都确保只匹配包含数组中所有条目的文档,只是MongoDB 2.6可用的语法稍微好一些。