복붙노트

[MONGODB] 쿼리에서 MongoDB를 $에 대한 응답의 순서? [복제]

MONGODB

쿼리에서 MongoDB를 $에 대한 응답의 순서? [복제]

조건 연산자에서 $에 MongoDB를 워드 프로세서 순서에 대해 아무 말도하지 않습니다. 나는 형태의 쿼리를 실행하는 경우

db.things.find({'_id': {'$in': id_array}});

반환 된 결과의 순서 될 것인가? 그리고 나를 MongoDB를 말할 수있는 방법이있다 "나는 결과가 id_array의 IDS와 같은 순서에있어 너무 분류 싶어은?"

해결법

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

    1.JIRA에서이 기능에 대한 질문 :

    JIRA에서이 기능에 대한 질문 :

    $ 또는 대신 $의에를 사용 신속히 꽤 좋은 반응을 얻었다

    c.find( { _id:{ $in:[ 1, 2, 0 ] } } ).toArray()
    

    c.find( { $or:[ { _id:1 }, { _id:2 }, { _id:0 } ] } ).toArray()
    

    더 많은 정보에 대한 버그 리포트를 읽어보십시오.

    최신 정보:

    $ 또는 해결 방법의 2.6.x로 시작하는 더 이상 작품을 해킹하지 않습니다 - 그것은 변경 구현의 부작용이었다.

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

    2.저도 같은 문제를 겪고 내 솔루션은 ID의 내 배열 (내 쿼리)와 MongoDB를 결과 내 배열 사이의 매핑을 할 수있는 해시 맵을 만드는 것이 었습니다.

    저도 같은 문제를 겪고 내 솔루션은 ID의 내 배열 (내 쿼리)와 MongoDB를 결과 내 배열 사이의 매핑을 할 수있는 해시 맵을 만드는 것이 었습니다.

    추가 작업은 각 항목에 새로운 키 - 값 쌍에 대해 결과의 배열을 검색하고 삽입하는 경우 : 키 ID이며 값이 결과 개체이다.

    내 쿼리이었다 같은 순서로 내 결과를 탐색 할 때 다음, 나는 올바른 개체를 검색하기 위해 해시 맵을 사용할 수 있습니다. 어떤 정렬 없으며 화려한 몽고 DB 옵션.

    자바 스크립트에서는 뭔가를 같이 할 것입니다 :

    //The order you want
    var queryIds = [ 8, 5, 3, 7 ];
    
    //The results from MongoDB in an undefined order
    var resultsFromMongoDB = [
        {_id: 7, data: "d" },
        {_id: 8, data: "a" },
        {_id: 5, data: "b" },
        {_id: 3, data: "c" },
    ];
    
    //The function to create a hashmap to do the mapping
    function createHashOfResults( results ){
        var hash = {};
    
        for( var i = 0 ; i < results.length ; i++ ){
            var item = results[i];
            var id = item._id;
            hash[ id ] = item;
        }
    
        return hash;
    }
    
    //Let's build the hashmap
    var hash = createHashOfResults( resultsFromMongoDB );
    
    //Now we can display the results in the order we want
    for( var i = 0 ; i < queryIds.length ; i++ ){
        var queryId = queryIds[i];
        var result = hash[queryId];
        console.log( result.data );
    }
    

    이 표시됩니다 :

    a
    b
    c
    d
    
  3. ==============================

    3.@ 제이슨의 대답은 올바른 것입니다.

    @ 제이슨의 대답은 올바른 것입니다.

    다른 답변 소개 : 그것은 심각한 성능 문제를 가져올 수 있기 때문에 나는 하나 하나를 조회 추천하지 않을 것입니다.

    @ 제이슨의 대답 또한, 이와 같이, Array.reduce Array.map 및 방법을 사용하여 최적화 될 수있다 :

    //The order you want
    var queryIds = [8, 5, 3, 7];
    
    //The results from MongoDB in an undefined order
    var resultsFromMongoDB = [
        {_id: 7, data: "d"},
        {_id: 8, data: "a"},
        {_id: 5, data: "b"},
        {_id: 3, data: "c"}
    ];
    
    var reorderedResults = naturalOrderResults(resultsFromMongoDB, queryIds);
    
    
    function naturalOrderResults(resultsFromMongoDB, queryIds) {
        //Let's build the hashmap
        var hashOfResults = resultsFromMongoDB.reduce(function (prev, curr) {
            prev[curr._id] = curr;
            return prev;
        }, {});
    
        return queryIds.map( function(id) { return hashOfResults[id] } );
    }
    
  4. ==============================

    4.그들이 어떤 신뢰할 수있는 방법으로 주문할 수 없기 때문에 결과의 순서는 언급되지 않습니다. 를 얻을 수있는 유일한 방법은 배열의 $의 각 항목에 대해 별도의 쿼리의 클라이언트 측을 할 것 주문

    그들이 어떤 신뢰할 수있는 방법으로 주문할 수 없기 때문에 결과의 순서는 언급되지 않습니다. 를 얻을 수있는 유일한 방법은 배열의 $의 각 항목에 대해 별도의 쿼리의 클라이언트 측을 할 것 주문

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

    5.당신이 Underscore.js를 사용하여 상관 없어 너무 규모에 대해 걱정하지 않는 경우 (IE를, 당신은 상관하지 않습니다 가져 오기 - 보내고 대신 커서 작업) 내가 순서를 유지하는 방법, 여기 :

    당신이 Underscore.js를 사용하여 상관 없어 너무 규모에 대해 걱정하지 않는 경우 (IE를, 당신은 상관하지 않습니다 가져 오기 - 보내고 대신 커서 작업) 내가 순서를 유지하는 방법, 여기 :

    var results = db.things.find({'_id': {'$in': id_array}}).fetch(); 
    return _.sortBy(results, function(thing) { 
      return id_array.indexOf(thing._id); 
    });
    
  6. ==============================

    6.$ 또는의 2.6.x에서 더 이상 일을 해결하지는 https://jira.mongodb.org/browse/SERVER-14083를 참조하십시오. 여기에 루비 해결 구현입니다 : https://gist.github.com/dblock/d5ed835f0147467a6a27

    $ 또는의 2.6.x에서 더 이상 일을 해결하지는 https://jira.mongodb.org/browse/SERVER-14083를 참조하십시오. 여기에 루비 해결 구현입니다 : https://gist.github.com/dblock/d5ed835f0147467a6a27

  7. from https://stackoverflow.com/questions/3142260/order-of-responses-to-mongodb-in-query by cc-by-sa and MIT license