Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在mongodb查询中操作列表_Javascript_Node.js_Mongodb_Socket.io - Fatal编程技术网

Javascript 在mongodb查询中操作列表

Javascript 在mongodb查询中操作列表,javascript,node.js,mongodb,socket.io,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(

这里的第一个问题,希望我做得对

我试图做的一件有趣的事是将其添加到查询中的列表中,然后能够从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
之后,内部发生的事情并不存在于外部,但我不明白为什么。提前谢谢

代码是异步的。实际上,这意味着您的最后一个语句:
console.log(总计)在第一个之前执行。要打印实际总数,您需要将代码包装到如下函数中:

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);
});

刚刚编辑了我的原始代码,使其更加清晰。该代码包含在socket.io函数中,因此我认为是的,而node.js是异步的,因为我的代码包含在较大的函数(socket.on)中,所以我希望能够在不编写任何嵌套函数的情况下操作其中的变量;无效。你应该做total.push({barname:bar['age']};bar['name']作为一个键也是无效的。此外,你可能应该停止你正在做的事情,并运行这个:它会让你省去很多麻烦。没有捕捉到那个条['name'],在我的实际代码中没有。谢谢。