操作mongodb查询中的列表

时间:2012-06-05 20:40:04

标签: javascript node.js mongodb socket.io

这里的第一个问题,希望我这样做是正确的......

我正在尝试做的事情是添加到查询中的列表,然后能够从node.js将此列表传递给我的客户端。我的代码(简化)如下:

socket.on('get_new', function() {   
var db = require('mongojs').connect('test', ['col1']);
var db2 = require('mongojs').connect('test', ['col2']);

db.col1.find( function(err, tups) {

    var total = [];

    if ( err || !rows ) { console.log("error") };
    else { 

          for(row in tups){ 
               var id = row['id'];

               db2.col2.find({name:id}, function(foo, bar){

                  if ( foo || !bar ) { console.log("error") }; 
                  else {

                     total += { name : bar['age'] };
                     console.log(total); //prints [ {alex:'20'}]
                  }
               }
           }
    }

  console.log(total); // prints []

}
}

正如我在代码中所展示的那样,我已经放置了一些console.log语句来查看值,并且在查询与之后它是不同的。我猜它与这段代码的范围有关,在我看来好像在db.test2.find运行之后,里面发生的事情在外面不存在,但我不明白为什么。提前谢谢!

1 个答案:

答案 0 :(得分:0)

代码是异步的。这在实践中意味着你的最后一句话:console.log(total);在第一句之前执行。要打印实际总数,您希望将该代码包装在如下函数中:

function myFnForTotal(notifyTotal) {

/* your code above the else  */
 total += someTotal;
 console.log(total); //prints [ {alex:'20'}]
 notifyTotal(total);
/* your code below else */
}

myFnForTotal(function(total) {
  console.log(total);
});