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

MongoDB 컬렉션의 객체 배열에서 쿼리된 요소만 검색하시겠습니까?

<시간/>

프로젝션 연산자 $elemMatch를 사용하여 MongoDB 컬렉션의 개체 배열에서 쿼리된 요소를 필터링할 수 있습니다. MongoDB의 객체 배열에서 쿼리된 요소만 검색하려면 먼저 문서 객체 배열로 컬렉션을 생성하겠습니다.

쿼리는 다음과 같습니다.

> db.objectArray.insert({"Persons":[
   {"PersonName":"Adam","PersonSalary":25000},{"PersonName":"Larry","PersonSalary":27000
   }]});
   WriteResult({ "nInserted" : 1 })
> db.objectArray.insert({"Persons":[
   {"PersonName":"David","PersonSalary":32000},{"PersonName":"Carol","PersonSalary":77000
   }]});
   WriteResult({ "nInserted" : 1 })

이제 find()를 사용하여 모든 문서를 표시할 수 있습니다. 쿼리는 다음과 같습니다.

> db.objectArray.find().pretty();

다음은 출력입니다.

{
   "_id" : ObjectId("5c6bfadc68174aae23f5ef53"),
   "Persons" : [
      {
         "PersonName" : "Adam",
         "PersonSalary" : 25000
      },
      {
         "PersonName" : "Larry",
         "PersonSalary" : 27000
      }
   ]
}
{
   "_id" : ObjectId("5c6bfb0968174aae23f5ef54"),
   "Persons" : [
      {
         "PersonName" : "David",
         "PersonSalary" : 32000
      },
      {
         "PersonName" : "Carol",
         "PersonSalary" : 77000
      }
   ]
}

다음은 MongoDB의 객체 배열에서 쿼리된 요소만 검색하는 쿼리입니다. _id:0의 여기 id 속성을 제외하기 위해 추가됨(_id 속성은 표시하지 않음):

> db.objectArray.find({"Persons.PersonSalary":25000}, {
_id:0,Persons:{$elemMatch:{"PersonSalary":25000}}}).pretty();

다음은 출력입니다.

{
   "Persons" : [
      {
         "PersonName" : "Adam",
         "PersonSalary" : 25000
      }
   ]
}

위의 작업을 수행하는 다른 방법은 투영 연산자 $를 사용하는 것입니다. 쿼리는 다음과 같습니다.

> db.objectArray.find({"Persons.PersonSalary":25000}, { _id:0,'Persons.$':1}).pretty();

다음은 출력입니다.

{
   "Persons" : [
      {
         "PersonName" : "Adam",
         "PersonSalary" : 25000
      }
   ]
}