Mongodb 根据值对mongo集合进行分组如果存在,则不分组,按原样显示
我想按“Company”属性对以下集合进行分组,仅当Company属性可用时,否则不按原样分组显示 这是我的收藏Mongodb 根据值对mongo集合进行分组如果存在,则不分组,按原样显示,mongodb,grouping,Mongodb,Grouping,我想按“Company”属性对以下集合进行分组,仅当Company属性可用时,否则不按原样分组显示 这是我的收藏 { "_id":"Wagon R", "type": "Car", "Company": "Suzuki" }, { "_id":"Ertiga", "type": "Car", "Company": "Suzuki" }, { "_id":"Accent", "type": "Car", "Company":
{
"_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",
}
我尝试过分组,但它给出的集合只有company属性。我还想要没有公司属性的记录
有人能帮忙吗
{
"$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" }
}
]);
首先,每辆车都有一个公司。请使用公司名称保存车辆数据。公司名称可以是present、empty或null。