여러 필드로 계산하려면 MongoDB에서 $facet를 사용합니다. $facet은 동일한 입력 문서 세트의 단일 단계 내에서 여러 집계 파이프라인을 처리합니다. 문서로 컬렉션을 만들자 −
> db.demo721.insertOne(... {....... "details1":{... "id":101...... },... "details2":{. .. "id":101... },... "details3":{... "id":101... }... }... );{ "승인됨" :true, "insertedId" " :ObjectId("5eaaebdd43417811278f5887")}>>> db.demo721.insertOne(... {....... "details1":{... "id":101...... },. .. "details2":{... "id":102... },... "details3":{... "id":102... }... }... );{ "확인됨":true, "insertedId":ObjectId("5eaaebe943417811278f5888")}
find() 메서드를 사용하여 컬렉션의 모든 문서 표시 -
> db.demo721.find();
이것은 다음과 같은 출력을 생성합니다 -
{ "_id" :ObjectId("5eaaebdd43417811278f5887"), "details1" :{ "id" :101 }, "details2" :{ "id" :101 }, "details3" :{ "id" :101 } }{ "_id" :ObjectId("5eaaebe943417811278f5888"), "details1" :{ "id" :101 }, "details2" :{ "id" :102 }, "details3" :{ "id" :102 } }사전>다음은 여러 필드로 계산하는 쿼리입니다 -
> db.demo721.aggregate([... {$facet:{... ids:[... {$group:{ _id:null,... d3:{$addToSet:"$details3. id"},... d2:{$addToSet:"$details2.id"},... d1:{$addToSet:"$details1.id"}}},... {$project:{ _id:0,... listofall:{$setUnion:["$d1","$d2","$d3"]}}}],... d:[{$project:{ _id:0,... a1:"$details1.id",... a2:"$details2.id",... a3:"$details3.id"}}]}},... {$unwind:"$d"} ,... {$unwind:"$ids"},... {$unwind:"$ids.listofall"},... {$group:{ _id:"$ids.listofall",... details1id :{$sum:{$cond:[{$eq:["$d.a1","$ids.listofall"]},1,0]}},... details2id:{$sum:{$cond :[{$eq:["$d.a2","$ids.listofall"]},1,0]}},... details3id:{$sum:{$cond:[{$eq:[" $d.a3","$ids.listofall"]},1,0]}}}}])이것은 다음과 같은 출력을 생성합니다 -
{ "_id" :102, "details1id" :0, "details2id" :1, "details3id" :1 }{ "_id" :101, "details1id" :2, "details2id" :1, "details3id" :1 }