Mongodb 如果未找到结果,则返回null默认值

Mongodb 如果未找到结果,则返回null默认值,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我有一个像这样的收藏: { "value" : "20", "type" : "square", "name" : "form1" } { "value" : "24", "type" : "circle", "name" : "form2" } { "value" : "12", "type" : "square", "name" : "form3" } { "name" : "form4", "type" : null } 我想提取一个name=form2的文档,因此我键入: db.

我有一个像这样的收藏:

{  
"value" : "20",
"type" : "square",
"name" : "form1"
}
{
"value" : "24",
"type" : "circle",
"name" : "form2"
}
{
"value" : "12",
"type" : "square",
"name" : "form3"
}
{ "name" : "form4", "type" : null }
我想提取一个
name=form2
的文档,因此我键入:

db.myCollec.find({"name":"form2"} , {"name":1, "type":1, "_id":0})
结果是:

{ "name" : "form2", "type" : "circle" }
现在,如果我想找到
name=form4
I的文档,请键入:

db.myCollec.find({"name":"form4"} , {"name":1, "type":1, "_id":0})
但这不会返回任何内容,因为没有具有此名称的文档

但是,我希望返回值如下所示:

{  
"value" : "20",
"type" : "square",
"name" : "form1"
}
{
"value" : "24",
"type" : "circle",
"name" : "form2"
}
{
"value" : "12",
"type" : "square",
"name" : "form3"
}
{ "name" : "form4", "type" : null }

我该怎么做?

您可以使用下面的聚合

如果在查询中未找到已删除的数据,Mongodb不会生成结果

但您可以使用聚合,它在单个阶段中处理多个聚合管道

因此,首先使用获取ed文档,如果没有找到()数据,则使用ion

let searchTerm = "form2"

db.myCollec.aggregate([
  { "$facet": {
    "data": [
      { "$match": { "name": searchTerm  }},
      { "$project": { "name": 1, "type": 1, "_id": 0 }}
    ]
  }},
  { "$project": {
    "name": {
      "$ifNull": [{ "$arrayElemAt": ["$data.name", 0] }, searchTerm ]
    },
    "type": {
      "$ifNull": [{ "$arrayElemAt": ["$data.type", 0] }, null]
    }
  }}
])

如果result==null,为什么不签入回调并创建自己的空对象

let name = "form4";
db.myCollec.find({"name":name} , {"name":1, "type":1, "_id":0}, function(err, result){
    if(err) {
         // Error handling
         return;
    }
    if (result==null){
        result = {"name":name, "type":null};
    }
});

Thanx,我试过了,但什么也没出现,所以我试着打印(结果),但还是什么都没有…Thanx,效果很好!我需要工作来理解它到底是如何工作的,即使我清楚地知道它在75%;-)我以前回答过的一些问题,非常简洁,非常有用-谢谢