如何以最大编号显示客户名称MongoDB中的订单数量?

时间:2018-10-29 17:27:07

标签: mongodb aggregation-framework

如何显示最大编号的客户名称MongoDB中的订单数量?订单是一个嵌套的子文档。

{

"_id" : ObjectId("5bd729c463b37537e42174a3"),
"name" : "Vedang",
"no" : "123",
"city" : "Pune",
"orders" : [
    {
        "order" : "1",
        "type" : "clothes",
        "total" : "1000"
    },
    {
        "order" : "2",
        "type" : "clothes",
        "total" : "2000"
    },
    {
        "order" : "3",
        "type" : "shoes",
        "total" : "3000"
    }
]

}

1 个答案:

答案 0 :(得分:0)

您可以使用聚合框架。

使用$size来获取订单数组的长度,后跟$sort desc和$facet来输出最大订单大小以及所有带有计数和名称的文档。

$project$filter一起输出计数与最大订单数匹配的所有文档。

$unwind$project一起输出最高订单的名称。

类似

db.colname.aggregate([
 {"$addFields":{"ordersize":{"$size":"$orders"}}},
 {"$sort":{"ordersize":-1}},
 {"$facet":{"maxordersize":[{"$limit":1},{"$project":{"ordersize":1}}], "docs":[{"$project":{"ordersize":1, "name":"$name"}}]}},
 {"$project":{"docs":{"$filter":{"input":"$docs","cond":{"$eq":["$$this.ordersize",{"$arrayElemAt":["$maxordersize.ordersize", 0]]}}}}}},
 {"$unwind":"$docs"},
 {"$project":{"name":"$docs.name"}}
])