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

MongoDB에서 내부 배열을 정렬하는 방법은 무엇입니까?

<시간/>

MongoDB의 집계 프레임워크를 사용하여 이를 달성할 수 있습니다. 이를 이해하기 위해 문서로 컬렉션을 만들어 보겠습니다. 문서로 컬렉션을 생성하는 쿼리는 다음과 같습니다.

> db.sortInnerArrayDemo.insertOne(
...
...    {
...       "EmployeeDetails":
...       {
...          "EmployeeAddress":
...          {
...             "EmployeeCountry":
...             [
...                {
...                   "EmployeeZipCode":1003,
...                   "EmployeeStreetName":"7885 Trusel Street"
...                },
...                {
...                   "EmployeeZipCode":1001,
...                   "EmployeeStreetName":"7390 Gonzales Drive"
...                },
...                {
...                   "EmployeeZipCode":1002,
...                   "EmployeeStreetName":"444 N.Myres Rd."
...                }
...             ]
...          }
...       }
...    }
...
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c6f07d3da34711ecf87a5b8")
}

find() 메서드를 사용하여 컬렉션의 모든 문서를 표시합니다. 쿼리는 다음과 같습니다.

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

다음은 출력입니다.

{
   "_id" : ObjectId("5c6f07d3da34711ecf87a5b8"),
   "EmployeeDetails" : {
      "EmployeeAddress" : {
         "EmployeeCountry" : [
         {
            "EmployeeZipCode" : 1003,
            "EmployeeStreetName" : "7885 Trusel Street"
         },
         {
            "EmployeeZipCode" : 1001,
            "EmployeeStreetName" : "7390 Gonzales Drive"
         },
         {
            "EmployeeZipCode" : 1002,
            "EmployeeStreetName" : "444 N.Myres Rd."
         }
      ]}
   }
}

다음은 내부 배열을 정렬하는 쿼리입니다.

사례 1 :오름차순으로 정렬합니다.

쿼리는 다음과 같습니다.

> db.sortInnerArrayDemo.aggregate(
... {$unwind: '$EmployeeDetails.EmployeeAddress.EmployeeCountry'},
... {$sort: {'EmployeeDetails.EmployeeAddress.EmployeeCountry.EmployeeZipCode': 1}},
... {$group: {_id: '$_id', 'EmpCountry': {$push:
'$EmployeeDetails.EmployeeAddress.EmployeeCountry'}}},
... {$project: {'EmployeeDetails.EmployeeAddress.EmployeeCountry':
'$EmpCountry'}}).pretty();

다음은 내부 배열이 EmployeeZipCode를 기준으로 오름차순으로 정렬되었음을 표시하는 출력입니다.

{
   "_id" : ObjectId("5c6f07d3da34711ecf87a5b8"),
   "EmployeeDetails" : {
      "EmployeeAddress" : {
         "EmployeeCountry" : [
            {
               "EmployeeZipCode" : 1001,
               "EmployeeStreetName" : "7390 Gonzales Drive"
            },
            {
               "EmployeeZipCode" : 1002,
               "EmployeeStreetName" : "444 N.Myres Rd."
            },
            {
               "EmployeeZipCode" : 1003,
               "EmployeeStreetName" : "7885 Trusel Street"
            }
         ]
      }
   }
}

사례 2 :내림차순으로 정렬

쿼리는 다음과 같습니다.

> db.sortInnerArrayDemo.aggregate(
... {$unwind: '$EmployeeDetails.EmployeeAddress.EmployeeCountry'},
... {$sort: {'EmployeeDetails.EmployeeAddress.EmployeeCountry.EmployeeZipCode':-1}},
... {$group: {_id: '$_id', 'EmpCountry': {$push:
'$EmployeeDetails.EmployeeAddress.EmployeeCountry'}}},
... {$project: {'EmployeeDetails.EmployeeAddress.EmployeeCountry':
'$EmpCountry'}}).pretty();

다음은 EmployeeZipCode를 기준으로 내림차순으로 정렬된 내부 배열을 표시하는 출력입니다.

{
   "_id" : ObjectId("5c6f07d3da34711ecf87a5b8"),
   "EmployeeDetails" : {
      "EmployeeAddress" : {
         "EmployeeCountry" : [
            {
               "EmployeeZipCode" : 1003,
               "EmployeeStreetName" : "7885 Trusel Street"
            },
            {
               "EmployeeZipCode" : 1002,
               "EmployeeStreetName" : "444 N.Myres Rd."
            },
            {
               "EmployeeZipCode" : 1001,
               "EmployeeStreetName" : "7390 Gonzales Drive"
            }
         ]
      }
   }
}