mongodb - 如何显示最大编号的客户姓名。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"
}
]
}
解决方案
您可以使用聚合框架。
用于$size
获取订单数组长度,后跟$sort
desc,并$facet
输出最大订单大小以及所有文档及其计数和名称。
$project
with$filter
输出所有与最大订单计数匹配的文档。
$unwind
with$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"}}
])
推荐阅读
- java-security - 如何解决 java.security.spec.InvalidKeySpecException:密码不是 ASCII
- python - 如何编写程序来计算相同元素的数量并将它们连接到一个数据帧中?
- python - 在 Python 中使用 K-means 将地理数据聚类到相同大小的组中
- unreal-engine4 - 有没有办法让物体在两点之间线性移动?
- amazon-web-services - 使用 CodeDeploy 到 ECS 的 AWS CodePipeline 找不到 appspec.yml
- java - 如何在 Java 中将“org.w3c.dom.Document”对象转换为“org.apache.commons.jxpath.xml.DocumentContainer”对象
- android - Android:通过在给定范围内的基础地图卫星视图上检测农场中的路径来绘制多边形
- java - java 模块在实践中是否提供不同的编译和运行时限制?
- android - Android 领域迁移问题 → java.lang.IllegalArgumentException:创建对象后无法更改主键字段“foo”
- python - 自定义表情符号和动画表情符号不起作用 [discord.py-rewrite]