如何匹配和分组 MongoDB 聚合中最大值的数组元素?
为此,使用 MongoDB 中的 $$group 和 $$max。让我们创建一个带有文档的集合 -
> db.demo510.insertOne(
... {
... details:[
... {
... Name:"Chris",
... Score:56
... },
... {
... Name:"David",
... Score:45
... }
... ]
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5e8845fa987b6e0e9d18f582")
}
> db.demo510.insertOne(
... {
... details:[
... {
... Name:"Chris",
... Score:56
... },
... {
... Name:"David",
... Score:47
... }
... ]
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5e8845fb987b6e0e9d18f583")
}
> db.demo510.insertOne(
... {
... details:[
... {
... Name:"Chris",
... Score:45
... },
... {
... Name:"David",
... Score:91
... }
... ]
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5e8845fb987b6e0e9d18f584")
}使用 find() 方法显示集合中的所有文档 -
> db.demo510.find();
这将产生以下输出 -
{ "_id" : ObjectId("5e8845fa987b6e0e9d18f582"), "details" : [ { "Name" : "Chris", "Score" : 56 },
{ "Name" : "David", "Score" : 45 } ] }
{ "_id" : ObjectId("5e8845fb987b6e0e9d18f583"), "details" : [ { "Name" : "Chris", "Score" : 56 },
{ "Name" : "David", "Score" : 47 } ] }
{ "_id" : ObjectId("5e8845fb987b6e0e9d18f584"), "details" : [ { "Name" : "Chris", "Score" : 45 },
{ "Name" : "David", "Score" : 91 } ] }以下是聚合中匹配和分组具有最大值(max value)的数组元素的查询 -
> db.demo510.aggregate([
... { "$project": {
... "details": {
... "$arrayElemAt": [
... { "$filter": {
... "input": "$details",
... "as": "res",
... "cond": {
... "$eq": [
... "$$res.Score",
... { "$max": {
... "$map": {
... "input": "$details",
... "as": "out",
... "in": "$$out.Score"
... }
... }}
... ]
... }
... }},
... 0
... ]
... }
... }},
... { "$group": {
... "_id": "$details.Name",
... "Name": { "$first": "$details.Name" },
... "count": { "$sum": 1 }
... }}
... ])这将产生以下输出 -
{ "_id" : "David", "Name" : "David", "count" : 1 }
{ "_id" : "Chris", "Name" : "Chris", "count" : 2 }
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP