JuJ*_*oDi 4 mongoose mongodb node.js
我有一个基于以下架构的(简化的)模型:
schema = mongoose.Schema({
foo: { type: String },
bars: [{ type: String }]
});
model = mongoose.model ('model', schema);
Run Code Online (Sandbox Code Playgroud)
我想创建一个 API 来返回包含逗号分隔列表中提供的所有“条”的所有文档。所以我有:
exports.findByBars = function (req, res) {
var barsToFind = req.body.bars.split(',');
// find the matching document
};
Run Code Online (Sandbox Code Playgroud)
Mongoose 是否为此提供了 API,或者是否有一个查询参数可以传递给 Model#find 来获取此功能?我只希望当文档的 bar 属性包含数组中的所有值时返回该文档barsToFind。
有多种方法可以构建您的查询来执行此操作,这些方法根据您的 mongodb 服务器版本而有所不同。因此,从您的代码开始:
对于 MongoDB 2.6 及更高版本,请使用$all运算符:
model.find({
"bars": { "$all": barsToFind }
},
Run Code Online (Sandbox Code Playgroud)
尽管以前的版本确实存在该运算符,但它的行为有所不同,因此您实际上需要生成一个$and语句来显式匹配每个条目:
var andBars = [];
barsToFind.forEach(function(bar) {
andBars.push({ "bars": bar })
});
model.find({
"$and": andBars
},
Run Code Online (Sandbox Code Playgroud)
两者都确保您只匹配包含指定数组中所有条目的文档,只是 MongoDB 2.6 可用的语法更好一些。
| 归档时间: |
|
| 查看次数: |
4160 次 |
| 最近记录: |