0
私はnodejs、express、mongodbでアプリを作っていますが、次の問題があります。地理空間データを使用して複数の集計クエリを作成する必要があります(たとえば、米国の州の境界内にあるドキュメントの数を調べるなど)。問題は、単純なforループ(すべての状態に対して)を最後に行っているときに、私が見ることができるのは最後のクエリの結果であり、それ以上はないということです。私はこれが非同期の方法JavaScriptの作品の問題だが、私は問題を解決する方法を見つけることができないことに気づいた。私のコードは、スタック上で見つかったコードに基づいて次のようになります。 statesDataはusa状態データを含むオブジェクトです。Mongo dbノードjs multipuple countクエリ
for(var i=0; i<51; i++){
increment = function(request, callback) {
var MongoClient = require('mongodb').MongoClient,
format = require('util').format;
MongoClient.connect('mongodb://localhost/DBNAME', function(err, db) {
if (err) throw err;
var collection = db.collection('ColName');
collection.count({PLACE: {
$geoWithin: {
$geometry: {
type : statesData.features[i].geometry.type ,
coordinates: statesData.features[i].geometry.coordinates,
}
}
}
}, function(err, count) {
if (err) throw err;
db.close();
console.log("docs count: " + count);
callback(null, count);
});
});
};
increment({}, function(err, count) {
console.log(count);
});
}
ザ・はすなわち、それは非同期ではありませんが、ブロックしています。非同期的なループのバージョンが必要です。Node.js 'async'モジュールを試してください: 'http:// caolan.github.io/async/docs.html#whilst'、すなわち' var count = 0; async.whilst( function(){return count <51;}、 関数(コールバック){...}) ' – chridam