mongodb - 如果未找到结果,则返回 null 默认值
问题描述
我有一个看起来像这样的集合:
{
"value" : "20",
"type" : "square",
"name" : "form1"
}
{
"value" : "24",
"type" : "circle",
"name" : "form2"
}
{
"value" : "12",
"type" : "square",
"name" : "form3"
}
我想提取一个文档,name = form2
所以我输入:
db.myCollec.find({"name":"form2"} , {"name":1, "type":1, "_id":0})
结果是:
{ "name" : "form2", "type" : "circle" }
现在,如果我想找到一个文档,name = form4
我输入:
db.myCollec.find({"name":"form4"} , {"name":1, "type":1, "_id":0})
但这不会返回任何内容,因为没有具有此名称的文档。
但是我希望返回值如下所示:
{ "name" : "form4", "type" : null }
我该怎么做?
解决方案
您可以使用以下聚合
$match
如果查询没有找到 ed 数据,Mongodb 不会产生结果。
但是您可以使用$facet
在单个阶段内处理多个聚合管道的聚合。
因此,首先使用$facet
获取$match
ed 文档并在未找到 ( ) 数据时使用$project
ion 。$ifNull
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]
}
}}
])
推荐阅读
- ionic-framework - 离子标签自动加载,无需点击
- vb.net - 如何转换 FTP Getlisting 字符串数组的编码?
- pandas - 根据索引 pandas 替换值
- c# - ASP.NET MVC 5 - 返回特殊错误页面而不是自定义错误页面
- javascript - 在 Leaflet.GeoJSON 中处理 JSON 响应
- jenkins - jenkins maven 元数据插件,使用参数构建不起作用
- c - 指针指向不同的数据类型
- excel - VBA 多值查找和替换,但也突出显示替换的单元格
- ssh - shh 连接到家用路由器
- php - Laravel Socialite 访问令牌和令牌