Computer >> 컴퓨터 >  >> 프로그램 작성 >> MongoDB

MongoDB 집계에서 배열 요소를 최대값과 일치시키고 그룹화하는 방법은 무엇입니까?

<시간/>

이를 위해 MongoDB에서 $max와 함께 $group을 사용합니다. 문서로 컬렉션을 만들자 −

> db.demo510.insertOne(... {... details:[... {... Name:"Chris",... Score:56... },... {.. . 이름:"David",... 점수:45... }... ]... }... );{ "승인됨":true, "insertedId":ObjectId("5e8845fa987b6e0e9d18f582")}> db .demo510.insertOne(... {... details:[... {... Name:"Chris",... Score:56... },... {... Name:"David ",... 점수:47... }... ]... }... );{ "승인됨" :true, "insertedId" :ObjectId("5e8845fb987b6e0e9d18f583")}> db.demo510.insertOne( ... {... details:[... {... Name:"Chris",... Score:45... },... {... Name:"David",... 점수:91... }... ]... }... );{ "승인됨" :true, "insertedId" :ObjectId("5e8845fb987b6e0e9d18f584")}

find() 메서드를 사용하여 컬렉션의 모든 문서 표시 -

> db.demo510.find();

이것은 다음과 같은 출력을 생성합니다 -

{ "_id" :ObjectId("5e8845fa987b6e0e9d18f582"), "details" :[ { "이름" :"크리스", "점수" :56 },{ "이름" :"데이비드", "점수" :45 } ] }{ "_id" :ObjectId("5e8845fb987b6e0e9d18f583"), "details" :[ { "이름" :"크리스", "점수" :56 },{ "이름" :"데이비드", "점수" :47 } ] }{ "_id" :ObjectId("5e8845fb987b6e0e9d18f584"), "details" :[ { "이름" :"크리스", "점수" :45 },{ "이름" :"데이비드", "점수" :91 } ] }

다음은 집계에서 최대값으로 배열 요소를 일치시키고 그룹화하는 쿼리입니다 -

> db.demo510.aggregate([... { "$project":{... "details":{... "$arrayElemAt":[... { "$filter":{.. . "입력":"$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 }