异步检索所有记录然后执行操作

时间:2012-11-23 12:04:56

标签: node.js mongodb

在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回调运行之前发送过。如何重新构造它以确保在迭代后发送?

1 个答案:

答案 0 :(得分: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));
  });
 }
});