处理MongoDB查询结果中不存在的子文档的最佳方法

时间:2018-11-08 21:21:25

标签: javascript node.js mongodb mongoose

我知道这个问题曾经以某种形式或形式被问过,但我正在寻找无需大量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);
           }
          }
        });

如果没有产品,则节点将崩溃,因为它无法确定未定义的“长度”。

我的问题是:还有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

您似乎已经在检查products_id,因此,如果返回,则永远不能为null。

另一种方法是检查查询中是否填充了该字段。

db.Packages.find({ "products.": { $exists: true, $ne: null } })

您可以在查询本身中进行检查,从而不必检入代码。