복붙노트

[MONGODB] 몽고 복잡한 정렬?

MONGODB

몽고 복잡한 정렬?

여러 개의 필드로하여 MongoDB의 쿼리를 정렬하는 방법을 알고, 예를 들어, db.coll.find () 종류. ({A : 1, B를 : -1}).

종류 I 사용자 정의 함수와 수; 예를 들어, 정수 a와 b (a-b) 사이의 차이에 의해, A 및 B에서 상정?

감사!

해결법

  1. ==============================

    1.업데이트 :이 답변은 구식 인 것 같습니다; 그 사용자 지정 정렬이 더 많거나 적은 이전 정렬에 입력 문서를 변환하는 집계 파이프 라인의 $ 프로젝트 기능을 사용하여 얻을 수있는 것 같다. 아리의 대답 @ 참조하십시오.

    업데이트 :이 답변은 구식 인 것 같습니다; 그 사용자 지정 정렬이 더 많거나 적은 이전 정렬에 입력 문서를 변환하는 집계 파이프 라인의 $ 프로젝트 기능을 사용하여 얻을 수있는 것 같다. 아리의 대답 @ 참조하십시오.

    나는이 직접 가능하다고 생각하지 않는다; 정렬 문서는 확실히 사용자 정의 비교 기능을 제공 할 수있는 방법을 언급하지 않습니다.

    당신은 아마 클라이언트의 정렬을하고 오프 최고,하지만 당신이 정말로 서버에 그것을 결정하는 경우에 당신은 당신의 클라이언트 경우 (서버의 종류를 실행하는 데 주선) (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 
    });
    

    이 집계 파이프 라인을 통해하고 $ ORDERBY 운영자에 의해 정렬 할 수도 있음을 참고 (즉 .sort에 추가 ()) 그러나 어느 쪽도 이러한 방법으로 당신이 중 하나를 사용자 지정 정렬 기능을 제공 할 수 없습니다.

  2. ==============================

    2.이이 우연히 내가 생각 해낸 것입니다 :

    이이 우연히 내가 생각 해낸 것입니다 :

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

    3.왜이 작업 및 종류와 필드를 생성하지?

    왜이 작업 및 종류와 필드를 생성하지?

  4. from https://stackoverflow.com/questions/3212919/mongo-complex-sorting by cc-by-sa and MIT license