Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB에서 조건에 일치하는 요소를 배열로 추가하는 쿼리 방법

MongoDB aggregate()로 조건에 맞는 키를 목록에 추가하기

MongoDB에서 특정 조건과 일치하는 요소만 추출해 새로운 목록(배열)로 추가하려면 aggregate() 메서드와 함께 $addFields, $filter 연산자를 활용하면 됩니다.

먼저 예제에 사용할 컬렉션을 생성하고 문서를 삽입해 보겠습니다.

> db.demo334.insertOne({
... "Name": "Chris",
... "Age": 21,
... "details": [{
... "Subject": "MySQL",
... "Score": 78
... }, {
... "Subject": "MongoDB",
... "Score": 45
... }]
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5e52241bf8647eb59e562090")
}

삽입된 문서 확인하기

find() 메서드를 사용해 컬렉션의 모든 문서를 조회할 수 있습니다.

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

위 명령을 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.

{
"_id" : ObjectId("5e52241bf8647eb59e562090"),
"Name" : "Chris",
"Age" : 21,
"details" : [
{
"Subject" : "MySQL",
"Score" : 78
},
{
"Subject" : "MongoDB",
"Score" : 45
}
]
}

조건에 일치하는 키를 필터링해 목록으로 추가하는 쿼리

이제 aggregate() 안에서 $addFields$filter를 조합하여, 점수(Score)가 70점 이상인 항목만 남긴 새로운 details 배열을 만들어 보겠습니다.

> db.demo334.aggregate([
... { $addFields: {
... details: {$filter: {
... input: '$details',
... as: 'out',
... cond: {$gte: ['$$out.Score', 70]}
... }}
... }}
... ])

쿼리 실행 결과는 다음과 같습니다.

{ "_id" : ObjectId("5e52241bf8647eb59e562090"), "Name" : "Chris", "Age" : 21, "details" : [ { "Subject" : "MySQL", "Score" : 78 } ] }

쿼리 동작 원리 정리

  • $addFields: 기존 문서에 새로운 필드를 추가하거나 기존 필드를 대체합니다.
  • $filter: 배열의 각 요소를 지정한 조건(cond)과 비교하여 조건을 충족하는 요소만 반환합니다.
  • $gte: '크거나 같음(greater than or equal)' 비교 연산자로, 여기서는 Score가 70 이상인 경우만 통과시킵니다.

이처럼 aggregate 파이프라인의 $filter 연산자를 사용하면 배열 내부의 요소 중 특정 조건과 일치하는 키만 골라내어 깔끔한 목록 형태로 재구성할 수 있습니다. 점수가 45점인 MongoDB 과목은 조건(70점 이상)을 충족하지 못해 결과에서 제외된 점에 주목하세요.