2017-12-06 3 views
1

나는 몽고/노드의 용어 모음에서 카테고리 트리를 구축하기 위해 노력하고있어,하지만, 처음에는에 $를 사용하여 모든 나무 요소 선택 :MongoDB를 toArray 성능

console.time('termsCol.find'); 
var terms = await termsCol.find({term_id: {'$in': flatTree}}); 
console.timeEnd('termsCol.find'); 

console.time('termsCol.toArray'); 
terms = await terms.toArray(); 
console.timeEnd('termsCol.toArray'); 

이 수행을 :

termsCol.find: 0.162ms 
termsCol.toArray: 30.910ms 

soArray 성능에 대한 게시물을 읽었으나 페이지 요청 중 많은 시간이 걸리기 때문에 변경된 사항이 있는지 알고 싶습니다.
나는 그 컬렉션에 대한 인덱스를 가지고 있으며 ~ 0.15ms 내에 300 개의 용어를 반환하지만, js에서 그 데이터를 사용하기 위해 또 다른 30ms를 기다려야 할 때 도움이되지 않습니다.
이 toArray 비즈니스를 향상시킬 방법이 없다면 캐시 컬렉션을 만들고 여기에 전체 용어 트리를 저장합니다 (16MB에 맞기를 희망합니다).

답변

3

참조 http://mongodb.github.io/node-mongodb-native/2.0/tutorials/streams/ 결과를 하나씩 스트리밍하고 ID 배열을 만들 수 있습니다.

var MongoClient = require('mongodb').MongoClient 
var url = 'mongodb://localhost:27017/myproject'; 
// Use connect method to connect to the Server 
MongoClient.connect(url, function(err, db) { 
    console.log("Connected correctly to server"); 
var col = db.collection('terms'); 
    var ids = [] 
    var findCursor = col.find({term_id: {'$in': flatTree}}); 
    findCursor.on("data", function(data) { 
     ids.push(data._id) 
    }); 
    findCursor.on("end", function(data) { 
     // let's finish 
     console.log(ids) 
    }); 
}); 

내가 시간을 확인하지만, 확실하지 않은 그 다음해야 이하 (termsCol.find : 0.162ms + termsCol.toArray : 30.910ms)