正如@cmgchess在评论中指出的那样,您的案例的主要困难在于字段名中的点。您可能希望将模式重构为以下内容:
{
"husband": {
"firstName": "John",
"secondName": "Smith"
},
"wife": {
"firstName": "Alice",
"secondName": "Watson"
}
}
然而,对于您当前的模式,您可以通过使用
$getField
.
db.collection.aggregate([
{
"$group": {
"_id": {
"husband": {
"firstName": {
"$getField": {
"field": "husband.firstName",
"input": "$$ROOT"
}
},
"secondName": {
"$getField": {
"field": "husband.secondName",
"input": "$$ROOT"
}
}
},
"wife": {
"firstName": {
"$getField": {
"field": "wife.firstName",
"input": "$$ROOT"
}
},
"secondName": {
"$getField": {
"field": "wife.secondName",
"input": "$$ROOT"
}
}
}
},
"count": {
"$sum": 1
}
}
},
{
"$sort": {
"count": -1
}
}
])
Mongo Playground