2017-12-06 13 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 

私はtoArrayのパフォーマンスについての記事を読んでいますが、何かが変更されたかどうかを知りたいのですが、これはページのリクエスト中にほとんどの時間がかかるためです。
私はそのコレクションにインデックスを持っており、〜0.15ms以内に300語を返しますが、jsでさらにデータを使用するために30ミリ秒を待たなければならないときは役に立ちません。
このtoArrayビジネスを改善する方法がない場合は、おそらくキャッシュコレクションを作成し、そこに完全な用語ツリーを格納します(16MBに収まることを望みます)。

答えて

3

参照http://mongodb.github.io/node-mongodb-native/2.0/tutorials/streams/ 結果を1つずつストリーミングして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)

関連する問題