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可用的语法稍微好一些。