使用mongoose时,Loop不在Node.js内工作

时间:2017-05-12 06:13:31

标签: javascript node.js mongodb mongoose

我正在尝试从mongoDB通过mongoose

获取记录
   router.route('/testaa')
     .get(function(req,res){
         fisSite.find(function(err, retVal) {
         var x = [];
         for(var i =0;i<retVal.length;i++){
         x.push(retVal[i].site);
        }
          res.json(x)
      });

   })

上面的代码给出了未定义的值。

undefined
undefined
undefined
.....

请帮助在node.js中运行for循环,以便我可以使用数组中的提取数据。

2 个答案:

答案 0 :(得分:0)

目前您正在做的是获取所有文档字段,然后只使用其中的一个。您可以使用select方法优化查询,该方法仅检索特定字段而不是所有字段:

[注意:默认情况下会添加id字段,因此要在select中删除它,我们使用-_id特别提及它。如果要在响应文档中维护ID,可以删除-_id。]

fisSite.find({}).select('site -_id').exec(function(err, docs)){

    if(err){
        return res.json({ status : false, message : 'Error Occured.'} );
    }
    else if(!docs){
        return res.json({ status : false, message : 'No documents found.'} );
    }
    else{
        return res.json({ status : success, message : 'Documents found.', data : docs} );
    }
}

想象一下,每个文档中有10个字段并找到结果100个文档,您只需要这100个文档中的站点字段,但不必要的是您要调用剩余的900个字段。

答案 1 :(得分:-1)

尝试添加空搜索查询以选择所有文档

尝试更改

来自:

fisSite.find(function(err, retVal) 

对此:

fisSite.find({}, function(err, retVal) 

还尝试执行console.log(retVal)检查您的查找是否实际返回任何值。