我正在使用mongoDB,但是我是一个完整的初学者。我有两个不同的查询,希望将它们组合成一个输出(我希望答案是一个查询)
查询1:
{ "_id" : "NonOfficerInvolved", "nInjured" : 0.5048153043227224, "nKilled" : 0.24339953718948618 }
哪个返回
db.fin.aggregate([
{ $match: { "misc.incident_characteristics": "Officer Involved Incident" } },
{ $group: {
_id: "OfficerInvolved",
nInjured: { $avg: "$casualties.n_injured" },
nKilled: { $avg: "$casualties.n_killed" }
}
}
])
查询2:
{ "_id" : "OfficerInvolved", "nInjured" : 0.3599233845980508, "nKilled" : 0.358965692073686 }
返回哪个
{ "_id" : "NonOfficerInvolved", "nInjured" : 0.5048153043227224, "nKilled" : 0.24339953718948618 }
{ "_id" : "OfficerInvolved", "nInjured" : 0.3599233845980508, "nKilled" : 0.358965692073686 }
我想将两者的结果都放在一张表中,如下所示。可以在一个查询中做到这一点吗?
pow
答案 0 :(得分:0)
是的,您绝对可以在一个查询中做到这一点。
不仅将匹配结果与魔术字符串匹配,还将匹配结果存储为布尔值或字符串形式的新字段,然后在该新字段上进行分组。
db.fin.aggregate([
{ "$addFields": { type:{
$cond:[
{$eq:["$misc.incident_characteristics","Officer Involved Incident"]},
"OfficerInvolved",
"NonOfficerInvolved"
]
}}},
{ $group: {
_id: "$type",
nInjured: { $avg: "$casualties.n_injured" },
nKilled: { $avg: "$casualties.n_killed" }
}
}
])
要使用正则表达式进行匹配,请替换行
{$eq:["$misc.incident_characteristics","Officer Involved Incident"]},
使用
{$regexMatch:{
input:"$misc.incident_characteristics",
regex:"Officer Involved Incident"
options:"i"
}},