mongodb - 如果存在,则根据值对 mongo 集合进行分组,否则不分组,按原样显示
问题描述
我想按“公司”属性对以下集合进行分组,仅当公司属性可用时,不要按原样分组显示
这是我的收藏。
{
"_id":"Wagon R",
"type": "Car",
"Company": "Suzuki"
},
{
"_id":"Ertiga",
"type": "Car",
"Company": "Suzuki"
},
{
"_id":"Accent",
"type": "Car",
"Company": "Hyundai"
},
{
"_id":"Camry",
"type": "Car",
"Company": "Toyoto"
},
{
"_id":"Corollo",
"type": "Car",
"Company": "Toyoto"
},
{
"_id":"M 800",
"type": "Car",
"Company": ""
},
{
"_id":"E 800",
"type": "Car",
},
{
"_id":"X 800",
"type": "Car",
}
所需的样本输出。
{
"_id":"Wagon R",
},
{
"_id":"Accent",
},
{
"_id":"Camry",
},
{
"_id":"M 800",
},
{
"_id":"E 800",
},
{
"_id":"X 800",
}
我尝试了分组,但它给出了只有公司属性的集合。我也想要没有公司属性的记录有人可以帮忙吗
{
"$match" : ----
},
{
"$group": {
"_id": "$Company",
"doc": {"$first":"$$ROOT"}
}
},
{
"$replaceRoot": {"newRoot":"$doc"}
}
解决方案
我在这个查询的帮助下得到了它:
db.getCollection('test999').aggregate([
{
$addFields: {
groupCompany:
{
$switch: {
branches: [
{ case : { $lt : ["$Company", null]}, then : "$_id"},
{ case : { $ne : ["$Company", ""]}, then: "$Company"},
{ case : { $eq : ["$Company",""]}, then : "$_id"}
]
,default: "default"
}
}
}
},
{
"$group": {
"_id": "$groupCompany",
"doc": { "$first": "$$ROOT" }
}
},
{
"$replaceRoot": { "newRoot": "$doc" }
}
]);
推荐阅读
- android - 将后置和前置摄像头用于同一个 MediaRecorder 会话 Camera2API
- python - 使用 psycopg2 将 python zip 文件上传到 aws lambda 时出错
- python - 如何在 pydantic/fast API 中使用日志记录
- jestjs - 升级到 Agora SDK NG - 版本 4.0.1 后,Jest 失败
- python - 您如何计算数据框中的这种差异?
- ios - 在 iOS 14 小部件中实现图像过渡动画
- r - ggplot2 — 有什么方法可以自动在同一个散点图上绘制不同的转换后的-y,对你来说?
- python - Django CORS 标头未按文档中的建议工作
- nodes - 如何以编程方式在多个地址部署 Solidity 智能合约?
- swift - 在 RealityKit 中导入多个 .usdz 对象并为其设置动画