programing

몽고 콤플렉스 정렬?

muds 2023. 6. 30. 22:40
반응형

몽고 콤플렉스 정렬?

MongoDB에서 쿼리를 여러 필드별로 정렬하는 방법을 알고 있습니다. 예를 들어,db.coll.find().sort({a:1,b:-1}).

사용자 정의 함수로 정렬할 수 있습니까? 예를 들어 a와 b가 정수라고 가정하면 a와 b의 차이로 정렬할 수 있습니다.(a-b)?

감사합니다!

업데이트: 이 답변은 오래된 것 같습니다. 정렬하기 전에 입력 문서를 변환하기 위해 집계 파이프라인의 기능을 사용하여 사용자 지정 정렬을 수행할 수 있습니다.@Ari의 답변을 참조하십시오.


이것이 직접적으로 가능하다고는 생각하지 않습니다. 정렬 설명서에는 사용자 지정 비교 기능을 제공하는 방법이 명시되어 있지 않습니다.

클라이언트에서 정렬하는 것이 가장 좋지만, 서버에서 정렬하기로 결정한 경우 사용할 수 있습니다.db.eval()클라이언트가 지원하는 경우 서버에서 정렬을 실행하도록 설정합니다.

서버 측 정렬:

db.eval(function() { 
  return db.scratch.find().toArray().sort(function(doc1, doc2) { 
    return doc1.a - doc2.a 
  }) 
});

동등한 클라이언트 측 정렬과 비교:

db.scratch.find().toArray().sort(function(doc1, doc2) { 
  return doc1.a - doc2.b 
});

집계 파이프라인을 통해 그리고 운영자에 의해 정렬될 수도 있습니다(즉,.sort()그러나 이 두 가지 방법 모두 사용자 정의 정렬 기능을 제공할 수 없습니다.

이런 상황에 부딪혔고 제가 생각해낸 것은 다음과 같습니다.

db.collection.aggregate([
  { 
    $project: {
      difference: { $subtract: ["$a", "$b"] }
      // Add other keys in here as necessary
    }
  },  
  { 
    $sort: { difference: -1 } 
  }
])

이 작업으로 필드를 만들고 정렬하는 것이 어떻습니까?

언급URL : https://stackoverflow.com/questions/3212919/mongo-complex-sorting

반응형