我正在使用mongojs,我必须从一个从mongodb获取的对象中检索一个字段。
我不明白如何返回字段:

  function retrieveVertById(id){

  var result = [];
  db.clusters.find({id: id}, function (err, clusters){
  if( err || !clusters) console.log("No cluster found");
  else clusters.forEach( function (cluster) {

    vert = cluster["vertices"];
    result.push(vert);
    console.log(result);


   });
 })
return result;
};

var a = retrieveVertById("001");
console.log(a);

“foreach”中的打印将打印正确的值:
(例如:[[8,2,2],[2,2,5],[2,2,2],[5,2,2]])
相反,周期外的打印显示空数组。
什么不适用于退货?
提前谢谢你的帮助。

最佳答案

我没有使用mongojs,但是任何db查找几乎肯定都是异步的。这意味着传递给db.clusters.find的函数不会立即运行,而是在mongo返回异步调用时运行。不要从retrieveVertById返回值,而是尝试回调函数:

function retrieveVertById(id, successCallback) {

  db.clusters.find({
    id: id
  }, function (err, clusters) {
    if (err || !clusters) {
        console.log("No cluster found");
    } else {
        var result = [];
        clusters.forEach(function (cluster) {
            vert = cluster["vertices"];
            result.push(vert);
        });
        successCallback(result);
    }
  });
};

retrieveVertById("001", function(result) {
  console.log(result);
});

09-11 18:04