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

Node.js Mongoose-查找数组属性包含给定子集的所有文档?,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我有一个基于以下模式的(简化)模型: schema = mongoose.Schema({ foo: { type: String }, bars: [{ type: String }] }); model = mongoose.model ('model', schema); 我想创建一个API来返回所有包含逗号分隔列表中提供的所有“条”的文档。因此,我: exports.findByBars = function (req, res) { var barsToFind

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

schema = mongoose.Schema({
    foo: { type: String },
    bars: [{ type: String }]
});
model = mongoose.model ('model', schema);
我想创建一个API来返回所有包含逗号分隔列表中提供的所有“条”的文档。因此,我:

exports.findByBars = function (req, res) {
  var barsToFind = req.body.bars.split(',');
  // find the matching document
};

Mongoose是否为此提供了API,或者我是否可以将查询参数传递给Model#find以获取此功能?我只希望在文档的bar属性包含
barsToFind
数组中的所有值时返回该文档。

有多种方法可以构造查询以实现此目的,方法因mongodb服务器版本而异。因此,请从您的代码中执行以下操作:

对于MongoDB 2.6及以上版本,请使用以下运算符:

model.find({
    "bars": { "$all": barsToFind }
},
虽然该运算符在以前的版本中确实存在,但其行为不同,因此您实际上需要生成一条语句来显式匹配每个条目:

var andBars = [];

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

model.find({
    "$and": andBars
},
这两种方法都确保只匹配包含数组中所有项的文档,正如您所指定的,只是MongoDB 2.6的语法稍微好一点