2013-05-09 1 views
0

MongoDB를 처음 사용하고 다른 결과를 얻으려고합니다.MongoDB 결과를 배열 대신 객체로 얻으십시오.

나는() toArray() 나는 같은 것을 얻을 쿼리 db.collection.find을 실행할 경우 :.

[ 
    { 
    "_id":"34234...", 
    "first":"Mark", 
    "last":"Marker" 
    }, 
    { 
    "_id": "34235...", 
    "first":"Adam", 
    "last":"Smith" 
    } 
] 

을 다음?

로 결과를받을 수 있도록하는 API를이
{ 
"results" : { 

    "34234..." :{ 
    "_id":"34234...", 
    "first":"Mark", 
    "last":"Marker" 
    }, 
    "4235..." :{ 
    "_id": "34235...", 
    "first":"Adam", 
    "last":"Smith" 
    } 

} 

결과 배열을 가져와 모든 단일 객체를 반복하고 응답을 작성해야합니다. (단일 커서 반복을 피하고 싶습니다.)

답변

0

거기에는 네이티브 API 함수가 있다고 생각하지 않습니다. cursor.toArray()은 커서의 각 항목을 처음부터 시작하므로 너무 걱정하지 않아도됩니다. 우리는 단지 toArray()를 생략하고 우리 자신의 반복 할 수있다 : 나는 정말 어떤 느린있을 거라고 생각하지 않습니다

var obj = {} 
db.collection.find().each(function(item){ 
    obj[item._id] = item; 
}); 

합니다.

+0

좋아, 내 컬렉션이 다른 서버에 있기 때문에 나는이 솔루션을 피하기를 원했다. 그래서 나는 "each()"함수가 서버에 대한 요청이라고 생각한다. (나는 틀린가?) API가없고 이전 생각에 대한 잘못된, 나는 솔루션 결과 배열을 얻으려면 (예) NodeJS 내 응답을 구축하여 iterate 것입니다 생각합니다. – fran

+0

이해할 수 있는지 잘 모르겠습니다. 서버에서 데이터를 가져와야합니다. 그렇지 않습니까? 이 솔루션은'toArray'가 어쨌든하지 않을 반복이나 액세스를하지 않습니다 ('each'처럼 커서를 소비합니다). 'toArray()'의 결과를 반복하는 것은 커서를 통해 반복하고 배열을 반복해야하기 때문에 조금 덜 효율적입니다. –

관련 문제