nodejs,mongodb - 如何操作来自多个查询的数据?

Rya*_*yan 1 javascript mongodb node.js

我一般都是JS的新手,但我试图从MongoDB中查询一些数据.基本上,我的第一个查询检索具有指定会话ID的会话的信息.第二个查询对位于指定位置附近的文档执行简单的地理查询.

我正在使用mongodb-native javascript驱动程序.所有这些查询方法都在回调中返回结果,因此它们是非阻塞的.这是我烦恼的根源.我需要做的是检索第二个查询的结果,并创建一个包含所有返回文档的sessionIds数组.然后我将把它们传递给一个函数.但是,我无法生成此数组并在回调之外的任何位置使用它.

有谁知道如何正确地做到这一点?

db.collection('sessions', function(err, collection) {
  collection.findOne({'sessionId': client.sessionId}, function(err, result) {
    collection.find({'geolocation': {$near: [result.geolocation.latitude, result.geolocation.longitude]}}, function(err, cursor) {
      cursor.toArray(function(err, item) {

      console.log(item);
    });
  });
});
Run Code Online (Sandbox Code Playgroud)

mas*_*lum 6

函数是javascript上唯一"封闭"范围的东西.

这意味着内部回调函数中的变量项在外部作用域上不可访问.

您可以在外部作用域中定义一个变量,以便所有内部变量都可以看到它:

function getItems(callback) {
  var items;

  function doSomething() {
    console.log(items);
    callback(items);
  }

  db.collection('sessions', function(err, collection) {
    collection.findOne({'sessionId': client.sessionId}, function(err, result) {
      collection.find({'geolocation': {$near: [result.geolocation.latitude, result.geolocation.longitude]}}, function(err, cursor) {
        cursor.toArray(function(err, docs) {
          items = docs;
          doSomething();
         });
       });
     });
   });
}
Run Code Online (Sandbox Code Playgroud)