Return null default value if no result found

后端 未结 2 1029
野性不改
野性不改 2020-12-19 17:14

I have a collection that looks like this:

{  
\"value\" : \"20\",
\"type\" : \"square\",
\"name\" : \"form1\"
}
{
\"value\" : \"24\",
\"type\" : \"circle\",
         


        
相关标签:
2条回答
  • 2020-12-19 17:45

    You can use below aggregation

    Mongodb doesn't produce the result if there is not $matched data found with the query.

    But you can use $facet aggregation which processes multiple aggregation pipeline within single stage.

    So first use $facet to get the $matched documents and use $projection if no ($ifNull) data found.

    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]
        }
      }}
    ])
    
    0 讨论(0)
  • 2020-12-19 17:52

    Why you dont check in callback if result==null and create your own empty object?

    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};
        }
    });
    
    0 讨论(0)
提交回复
热议问题