복붙노트

[MONGODB] MongoDB를에 정렬 사례를 구분

MONGODB

MongoDB를에 정렬 사례를 구분

어떻게은 대문자와 소문자를 구별하지 않고, 주어진 필드에 의해 MongoDB의 모음을 정렬 할 수 있습니다? 기본적으로 나는-Z 전에 A-Z를 얻을.

나는 자바를 사용하고 있습니다.

해결법

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

    1.최신 정보: 지금은 대소 문자를 구분 인덱스가 MongoDB를 현재로 :

    최신 정보: 지금은 대소 문자를 구분 인덱스가 MongoDB를 현재로 :

    Users.find({})
      .collation({locale: "en" })
      .sort({name: 1})
      .exec()
      .then(...)
    

    껍질:

    db.getCollection('users')
      .find({})
      .collation({'locale':'en'})
      .sort({'firstName':1})
    

    업데이트 :이 답변은 3.4 사례를 구분 인덱스를해야합니다, 날짜를 벗어났습니다. https://jira.mongodb.org/browse/SERVER-90 자세한 내용은 JIRA에 봐

    불행하게도 MongoDB를 아직 대소 문자를 구분 인덱스가되지 않습니다 https://jira.mongodb.org/browse/SERVER-90을하고 작업은 (는) 기선을 제압했습니다.

    이 수단 종류의 케이스에있는 유일한 방법은 영향을받지 현재 실제로 특정을 만드는 것입니다 문제의 정렬 필드의 (물론 맡았다 낮은) 값을 복사하고 그 대신에 정렬 "맡았다 하한"필드.

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

    2.정렬은 MongoDB의에 같은 작업을 수행하지만 당신은 골재와 플라이에서이 작업을 수행 할 수 있습니다 :

    정렬은 MongoDB의에 같은 작업을 수행하지만 당신은 골재와 플라이에서이 작업을 수행 할 수 있습니다 :

    다음과 같은 데이터를 가지고 :

    { "field" : "BBB" }
    { "field" : "aaa" }
    { "field" : "AAA" }
    

    다음 문을 그래서 :

    db.collection.aggregate([
        { "$project": {
           "field": 1,
           "insensitive": { "$toLower": "$field" }
        }},
        { "$sort": { "insensitive": 1 } }
    ])
    

    같은 결과를 생성합니다 :

    {
        "field" : "aaa",
        "insensitive" : "aaa"
    },
    {
        "field" : "AAA",
        "insensitive" : "aaa"
    },
    {
        "field" : "BBB",
        "insensitive" : "bbb"
    }
    

    삽입의 실제 순서는 변환 될 때 동일한 키에 따른 어떤 값으로 유지 될 것이다.

  3. ==============================

    3.이 MongoDB를 JIRA에 꽤 오랜 시간 동안 문제 였지만 지금은 해결된다. 자세한 설명서이 릴리스 노트를 살펴 보자. 당신은 정렬을 사용합니다.

    이 MongoDB를 JIRA에 꽤 오랜 시간 동안 문제 였지만 지금은 해결된다. 자세한 설명서이 릴리스 노트를 살펴 보자. 당신은 정렬을 사용합니다.

    User.find()
        .collation({locale: "en" }) //or whatever collation you want
        .sort({name:1})
        .exec(function(err, users) {
            // use your case insensitive sorted results
        });
    
  4. ==============================

    4.현재로서는 (MongoDB를 4) 다음을 수행 할 수 있습니다 :

    현재로서는 (MongoDB를 4) 다음을 수행 할 수 있습니다 :

    몽고 쉘 :

    db.getCollection('users')
      .find({})
      .collation({'locale':'en'})
      .sort({'firstName':1});
    

    몽구스:

    Users.find({})
      .collation({locale: "en" })
      .sort({name: 1})
      .exec()
      .then(...)
    

    여기에 MongoDB에 의해 언어와 로케일을 지원합니다.

  5. ==============================

    5.여기 자바입니다. 나는 더-인수 및 단지 다양한 BasicDBObject의 첫 번째 키 - 발 변형을 혼합하지

    여기 자바입니다. 나는 더-인수 및 단지 다양한 BasicDBObject의 첫 번째 키 - 발 변형을 혼합하지

            DBCollection coll = db.getCollection("foo");
    
            List<DBObject> pipe = new ArrayList<DBObject>();
    
            DBObject prjflds = new BasicDBObject();
            prjflds.put("field", 1);
            prjflds.put("insensitive", new BasicDBObject("$toLower", "$field"));
    
            DBObject project = new BasicDBObject();
            project.put("$project", prjflds);
            pipe.add(project);
    
            DBObject sort = new BasicDBObject();
            sort.put("$sort", new BasicDBObject("insensitive", 1));
            pipe.add(sort);
    
            AggregationOutput agg = coll.aggregate(pipe);
    
            for (DBObject result : agg.results()) {
                System.out.println(result);
            }
    
  6. ==============================

    6.코드 .collation ({ '지역': 'EN'을}) 추가하면 내 문제를 해결하는 데 도움을 주었다.

    코드 .collation ({ '지역': 'EN'을}) 추가하면 내 문제를 해결하는 데 도움을 주었다.

  7. ==============================

    7.몽구스에서 -

    몽구스에서 -

    Customer.find()
      .collation({locale: "en" })
      .sort({comapany: 1})
    
  8. ==============================

    8.우리는 자바 스크립트 배열의 .sort 기능의 도움으로이 문제를 해결하기

    우리는 자바 스크립트 배열의 .sort 기능의 도움으로이 문제를 해결하기

    여기에 코드입니다

    
        function foo() {
          let results = collections.find({
            _id: _id
          }, {
            fields: {
              'username': 1,
            }
          }).fetch();
    
          results.sort((a, b)=>{
            var nameA = a.username.toUpperCase();
            var nameB = b.username.toUpperCase();
    
            if (nameA  nameB) {
              return 1;
            }
            return 0;
          });
    
          return results;
        }
    
    
  9. from https://stackoverflow.com/questions/22931177/case-insensitive-sorting-in-mongodb by cc-by-sa and MIT license