MongoDB에서 여러 하위 문서를 필터링하려면 집계()를 사용합니다. 문서로 컬렉션을 만들자 −
> db.demo200.insertOne(... {... "Id":"101",... "details1":[... {... "isActive":true,... " SubjectName":"MySQL"... },{... "isActive":false,... "SubjectName":"Java"... }... ],... "details2":[.. . {... "isActive":false,... "이름":"데이비드"... },{... "isActive":true,... "이름":"마이크"... } ... ]... }...);{ "승인됨" :true, "insertedId" :ObjectId("5e3c374f03d395bdc21346e4")}
find() 메서드를 사용하여 컬렉션의 모든 문서 표시 -
> db.demo200.find();
이것은 다음과 같은 출력을 생성합니다 -
{ "_id" :ObjectId("5e3c374f03d395bdc21346e4"), "Id" :"101", "details1" :[ { "isActive" :true, "SubjectName" :"MySQL" }, { "isActive" :false , "SubjectName" :"자바" } ], "details2" :[ { "isActive" :false, "이름" :"David" }, { "isActive" :true, "이름" :"마이크" } ]}사전>다음은 여러 하위 문서를 필터링하는 쿼리입니다 -
> var out=[... {... "$match":{... "Id":"101",... "details1.isActive":true,... "details2.isActive ":참... }... },... { "$unwind":"$details1" },... { "$unwind":"$details2" },... {... " $match":{... "details1.isActive":true,... "details2.isActive":true... }... },... {... "$group":{.. . "_id":{... "_id":"$_id",... "Id":"$Id"... },... "details2":{ "$addToSet" :"$details2 " },... "details1":{ "$addToSet" :"$details1" }... }... },... {... "$project":{... "_id":0,... "ID":"$_id.Id",... "details2":1,... "details1":1... }... }...]>> db.demo200 .aggregate(out)이것은 다음과 같은 출력을 생성합니다 -
{ "details2" :[ { "isActive" :true, "이름" :"Mike" } ], "details1" :[ { "isActive" :true, "SubjectName" :"MySQL" } ], "Id " :"101" }