我知道这个问题曾经以某种形式或形式被问过,但我正在寻找无需大量if语句即可处理查询结果的最佳方法。
假设我要在包装(文档)中寻找产品(子文档)
cell(1,2)
我注意到我做不到:
Packages.find({_id : req.body.packId, "products._id" : req.body.prodId})
.exec(function(err, result){
if(err) throw err;
// make sure the result array exists and is not empty
if(result && result.length > 0) {
// make sure product array exists and is not empty
if(result.products && result.products.length > 0){
res.json(result);
}
}
});
如果没有产品,则节点将崩溃,因为它无法确定未定义的“长度”。
我的问题是:还有更好的方法吗?
答案 0 :(得分:0)
您似乎已经在检查products_id,因此,如果返回,则永远不能为null。
另一种方法是检查查询中是否填充了该字段。
db.Packages.find({ "products.": { $exists: true, $ne: null } })
您可以在查询本身中进行检查,从而不必检入代码。