0

我正在尝试根据在 Node JS 应用程序中通过 Monk API 在 MongoDB 上查找的结果设置一个变量(这是我第一次使用 MongoDB)。

这是我拥有的代码示例;

var variableIWantToSet;
var collection = req.db.get('myCollection');
collection.find( { foo: 'bar' },{
  fields : { myTargetField: 1, _id: 0},
  limit : 1,
  sort : {$natural : -1}
}
, function(err, doc) {
    if (err) {
      console.log(err);
    }
    variableIWantToSet = doc[0].myTargetField;
});
console.log(variableIWantToSet);

如果我console.log(doc[0].myTargetField)在函数内得到正确的值,但console.log(variableIWantToSet)返回undefined.

帮助表示赞赏。谢谢。

4

1 回答 1

0

console.log 在回调之外。所以它是undefined。把它放在回调中。

var collection = req.db.get('myCollection');
collection.find( { foo: 'bar' },{
  fields : { myTargetField: 1, _id: 0},
  limit : 1,
  sort : {$natural : -1}
}
, function(err, doc) {
    if (err) {
      console.log(err);
    }
    var variableIWantToSet = doc[0].myTargetField;
    console.log(variableIWantToSet);
});

为了更容易理解:

 //The callback function will be call after the mongodb response right value.
var callback = function(err, doc) {
    if (err) {
      console.log(err);
    }
    variableIWantToSet = doc[0].myTargetField;
    console.log(variableIWantToSet); // return doc[0].myTargetField;
}; 

var variableIWantToSet;

var collection = req.db.get('myCollection');
collection.find( { foo: 'bar' },{
  fields : { myTargetField: 1, _id: 0},
  limit : 1,
  sort : {$natural : -1}
}
, callback);
 console.log(variableIWantToSet); // return undefined;

如果您不了解callback,请 google 一下,它是异步编程的基础,这使 javascript 与众不同。

于 2015-02-28T14:37:21.527 回答