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

MongoDB가 여러 하위 문서를 필터링합니까?

<시간/>

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" }