0

node.jsサーバーで、mongodbネイティブドライバーを使用して、カーソルからレコードを取得し、それらをJSONとして出力したいと思います。私はこれを持っています(簡略化)

var ans = {ids: []};
cursor.each(function(err, doc) {
 if (doc) {
  ans.ids.push(doc.tag);
 }
});
cursor.count(function(err, result) {
 ans.count = result;
 res.send(JSON.stringify(ans));
});

結果は次のようになり{ids:[], count: 3}ます。つまり、クエリはレコードを返さずに実行されているように見えます。これは、コールバックが実行される前にデータがすでに送信されているためだと思いcursor.eachます。これを再構築して、反復後に送信が確実に行われるようにするにはどうすればよいですか?

4

1 に答える 1

1

私は答えを見つけました。cursor.eachの例では、「アイテムがnullの場合、カーソルは使い果たされ/空になり、閉じられます」と示されているため、:(エラー処理は省略されています)

var ans = {ids: []};
cursor.each(function(err, doc) {
 if (doc) {
  ans.ids.push(doc.tag);
 }
 else {
  cursor.count(function(err, result) {
   ans.count = result;
   res.send(JSON.stringify(ans));
  });
 }
});
于 2012-11-23T12:16:53.603 に答える