문서로 컬렉션을 만들자 −
> db.demo586.insertOne( ... {"details": [ ... { ... "Name":"Chris", ... "Marks":71 ... }, ... { ... "Name":"Chris", ... "Marks":61 ... }, ... { ... "Name":"David", ... "Marks":81 ... } ... ... ] ... } ... ); { "acknowledged" : true, "insertedId" : ObjectId("5e9200fefd2d90c177b5bcc7") } > db.demo586.insertOne( ... {"details": [ ... { ... "Name":"Chris", ... "Marks":71 ... }, ... { ... "Name":"Carol", ... "Marks":61 ... }, ... { ... "Name":"David", ... "Marks":81 ... } ... ... ] ... } ... ); { "acknowledged" : true, "insertedId" : ObjectId("5e9200fefd2d90c177b5bcc8") }
find() 메서드를 사용하여 컬렉션의 모든 문서 표시 -
> db.demo586.find();
이것은 다음과 같은 출력을 생성합니다 -
{ "_id" : ObjectId("5e9200fefd2d90c177b5bcc7"), "details" : [ { "Name" : "Chris", "Marks" : 71 }, { "Name" : "Chris", "Marks" : 61 }, { "Name" : "David", "Marks" : 81 } ] } { "_id" : ObjectId("5e9200fefd2d90c177b5bcc8"), "details" : [ { "Name" : "Chris", "Marks" : 71 }, { "Name" : "Carol", "Marks" : 61 }, { "Name" : "David", "Marks" : 81 } ] }
다음은 구별하여 선택하고 계산하는 쿼리입니다 -
> var q= [ ... { "$unwind": "$details" }, ... { ... "$group": { ... "_id": { ... "Name": "$details.Name", ... "Marks": "$details.Marks" ... }, ... "count": { "$sum": 1 } ... } ... }, ... { ... "$group": { ... "_id": "$_id.Name", ... "distinctV": { ... "$addToSet": { ... "value": "$_id.Marks", ... "numberOfValues": "$count" ... } ... } ... } ... }, ... { ... "$project": { ... "_id": 0, ... "Name": "$_id", ... "distinctV": 1 ... } ... } ... ]; > db.demo586.aggregate(q);
이것은 다음과 같은 출력을 생성합니다 -
{ "distinctV" : [ { "value" : 61, "numberOfValues" : 1 } ], "Name" : "Carol" } { "distinctV" : [ { "value" : 71, "numberOfValues" : 2 }, { "value" : 61, "numberOfValues" : 1 } ], "Name" : "Chris" } { "distinctV" : [ { "value" : 81, "numberOfValues" : 2 } ], "Name" : "David" }