2014-04-19 49 views
2

我有一个基于以下架构(简体)型号:Mongoose - 查找其数组属性包含给定子集的所有文档?

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 
}; 

猫鼬是否为此提供了一个API还是有一个查询参数,我可以传给型号找得到这个功能呢?如果它的bar属性包含barsToFind数组中的所有值,我只希望返回一个文档。

回答

3

有一些方法可以构建您的查询来完成此操作,这些方法根据您的mongodb服务器版本而不同。所以从你的代码下面的:

MongoDB的版本2.6及以上,使用$all操作:

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

而且虽然操作者存在以前的版本中,它的表现有所不同,因此您的实际需要产生一个$and语句中的每个条目明确匹配:

var andBars = []; 

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

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

两个确保只匹配包含所有的数组中的条目为您指定的文件,它只是语法可用MongoDB 2.6更好一点。

相关问题