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

중첩 배열의 모든 요소가 조건과 일치하는 객체를 필터링하는 MongoDB 쿼리

<시간/>

이를 위해 집계()를 사용합니다. 먼저 문서로 컬렉션을 생성해 보겠습니다. −

> db.demo418.insertOne(... {... "details":[... {... "CountryName":"US",... "Marks":45... }, ... {... "CountryName":"US",... "Marks":56... },....... ],... "Name":"John"... } ... );{ "승인됨" :true, "insertedId" :ObjectId("5e724324b912067e57771ae6")}> db.demo418.insertOne(... {... "세부 정보":[... {... " CountryName":"US",... "Marks":78... },... {... "CountryName":"UK",... "Marks":97... },.. .... ],... "이름":"마이크"... }... );{ "승인됨" :true, "insertedId" :ObjectId("5e724325b912067e57771ae7")}

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

> db.demo418.find();

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

{ "_id" :ObjectId("5e724324b912067e57771ae6"), "details" :[ { "CountryName" :"US", "Marks" :45 }, { "CountryName" :"US", "Marks" :56 } ], "이름" :"John" }{ "_id" :ObjectId("5e724325b912067e57771ae7"), "details" :[ { "CountryName" :"US", "Marks" :78 }, { "CountryName" :" UK", "Marks" :97 } ], "Name" :"Mike" }

다음은 중첩 배열의 모든 요소가 조건과 일치하는 개체를 필터링하는 쿼리입니다 -

> db.demo418.aggregate([... {$unwind:"$details"},... { $group:{... _id:'$_id',... details :{ $first :'$details' },... alldetails:{ $sum:1 },... alldetailsmatch:{ $sum:{ $cond:[ { $eq:[ '$details.CountryName', "US" ] } , 1, 0 ] } },... 이름:{ $first:'$Name' }... }},... { $project:{... _id:1,... 이름:1, ... 세부 정보:1,... arrayValue:{ $cond:[ { $eq:[ '$alldetails', '$alldetailsmatch' ] }, 1, 0 ] }... }},... { $ 일치:{ '배열 값' :1 } }... ])

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

{ "_id" :ObjectId("5e724324b912067e57771ae6"), "details" :{ "CountryName" :"US", "Marks" :45 }, "Name" :"John", "arrayValue" :1 }