[MONGODB] 쿼리에서 MongoDB를 $에 대한 응답의 순서? [복제]
MONGODB쿼리에서 MongoDB를 $에 대한 응답의 순서? [복제]
조건 연산자에서 $에 MongoDB를 워드 프로세서 순서에 대해 아무 말도하지 않습니다. 나는 형태의 쿼리를 실행하는 경우
db.things.find({'_id': {'$in': id_array}});
반환 된 결과의 순서 될 것인가? 그리고 나를 MongoDB를 말할 수있는 방법이있다 "나는 결과가 id_array의 IDS와 같은 순서에있어 너무 분류 싶어은?"
해결법
-
==============================
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.저도 같은 문제를 겪고 내 솔루션은 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.@ 제이슨의 대답은 올바른 것입니다.
@ 제이슨의 대답은 올바른 것입니다.
다른 답변 소개 : 그것은 심각한 성능 문제를 가져올 수 있기 때문에 나는 하나 하나를 조회 추천하지 않을 것입니다.
@ 제이슨의 대답 또한, 이와 같이, 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.그들이 어떤 신뢰할 수있는 방법으로 주문할 수 없기 때문에 결과의 순서는 언급되지 않습니다. 를 얻을 수있는 유일한 방법은 배열의 $의 각 항목에 대해 별도의 쿼리의 클라이언트 측을 할 것 주문
그들이 어떤 신뢰할 수있는 방법으로 주문할 수 없기 때문에 결과의 순서는 언급되지 않습니다. 를 얻을 수있는 유일한 방법은 배열의 $의 각 항목에 대해 별도의 쿼리의 클라이언트 측을 할 것 주문
-
==============================
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.$ 또는의 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
from https://stackoverflow.com/questions/3142260/order-of-responses-to-mongodb-in-query by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 예외 : 날짜에 BSON 유형 EòÒ에서 변환 할 수 없습니다 (0) | 2019.12.08 |
---|---|
[MONGODB] MongoDB를 닷넷 드라이버 2.0 풀 (제거 요소) (0) | 2019.12.08 |
[MONGODB] 이 개 필드를 사용하여 몽구스 지정 유효성 검사 (0) | 2019.12.08 |
[MONGODB] 몽구스를 사용하여 MongoDB의 문서에서 키를 삭제 (0) | 2019.12.08 |
[MONGODB] MongoDB를 접두사 와일드 카드 : 전체 텍스트 검색 ($ 텍스트) 검색 문자열 부분을 찾아 (0) | 2019.12.08 |