首页 > 解决方案 > 如何显示最大编号的客户姓名。MongoDB中的订单?

问题描述

如何显示最大编号的客户姓名。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"
    }
]

}

标签: mongodbaggregation-framework

解决方案


您可以使用聚合框架。

用于$size获取订单数组长度,后跟$sortdesc,并$facet输出最大订单大小以及所有文档及其计数和名称。

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

$unwindwith$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"}}
])

推荐阅读