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

MongoDB에서 null 값이 포함된 경우 ORDER BY 정렬을 사용하는 방법

MongoDB에서 컬렉션에 null 값이 포함되어 있어도 sort() 메서드를 사용하면 손쉽게 정렬(ORDER BY)을 구현할 수 있습니다.

참고: MongoDB v3.2부터 mongo 셸에서 $orderby 연산자는 더 이상 지원되지 않습니다(deprecated). 따라서 대신 cursor.sort() 또는 애그리게이션의 $sort 단계를 사용하는 것이 좋습니다.

1. 샘플 컬렉션 생성하기

먼저 문서들이 담긴 컬렉션을 생성해 보겠습니다. 여기에는 일반 문자열 값과 함께 null 값도 포함되어 있습니다.

> db.demo530.insertOne({"Name":"Chris"});{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e8b2990ef4dcbee04fbbbec")
}
> db.demo530.insertOne({"Name":null});{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e8b2991ef4dcbee04fbbbed")
}
> db.demo530.insertOne({"Name":"David"});{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e8b2992ef4dcbee04fbbbee")
}
> db.demo530.insertOne({"Name":"Adam"});{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e8b2995ef4dcbee04fbbbef")
}
> db.demo530.insertOne({"Name":null});{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e8b2999ef4dcbee04fbbbf0")
}
> db.demo530.insertOne({"Name":"Carol"});{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e8b299eef4dcbee04fbbbf1")
}

2. 저장된 모든 문서 확인하기

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

> db.demo530.find();

위 쿼리는 다음과 같은 결과를 출력합니다.

{ "_id" : ObjectId("5e8b2990ef4dcbee04fbbbec"), "Name" : "Chris" }
{ "_id" : ObjectId("5e8b2991ef4dcbee04fbbbed"), "Name" : null }
{ "_id" : ObjectId("5e8b2992ef4dcbee04fbbbee"), "Name" : "David" }
{ "_id" : ObjectId("5e8b2995ef4dcbee04fbbbef"), "Name" : "Adam" }
{ "_id" : ObjectId("5e8b2999ef4dcbee04fbbbf0"), "Name" : null }
{ "_id" : ObjectId("5e8b299eef4dcbee04fbbbf1"), "Name" : "Carol" }

3. null 값을 포함한 상태에서 정렬하기

null 값이 섞여 있어도 애그리게이션 파이프라인에서 $match$sort를 조합하면 원하는 순서대로 정렬할 수 있습니다. 아래 쿼리는 Name 필드가 존재하는 문서만 필터링한 뒤 오름차순으로 정렬합니다.

> db.demo530.aggregate([
...     {$match: {"Name": {$exists: true}}}
...     ,
...     {$sort: { "Name": 1}}
... ]);

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

{ "_id" : ObjectId("5e8b2991ef4dcbee04fbbbed"), "Name" : null }
{ "_id" : ObjectId("5e8b2999ef4dcbee04fbbbf0"), "Name" : null }
{ "_id" : ObjectId("5e8b2995ef4dcbee04fbbbef"), "Name" : "Adam" }
{ "_id" : ObjectId("5e8b299eef4dcbee04fbbbf1"), "Name" : "Carol" }
{ "_id" : ObjectId("5e8b2990ef4dcbee04fbbbec"), "Name" : "Chris" }
{ "_id" : ObjectId("5e8b2992ef4dcbee04fbbbee"), "Name" : "David" }

결과 분석

출력 결과를 보면 MongoDB의 BSON 비교 순서에 따라 null 값이 가장 먼저 배치되고, 그 뒤로 문자열 값이 알파벳순(Adam → Carol → Chris → David)으로 정렬된 것을 확인할 수 있습니다. 내림차순으로 정렬하고 싶다면 $sort의 값을 -1로 변경하면 됩니다.