簡體   English   中英

使用貓鼬時,For Loop在Node.js中不起作用

[英]For Loop not working inside Node.js while using mongoose

我正在嘗試通過mongoose從mongoDB獲取記錄

   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循環,以便我可以使用從數組中提取數據。

當前,您正在執行的操作是獲取所有文檔字段,然后僅使用其中的一個。 您可以使用select方法優化查詢,該方法將僅檢索特定字段,而不檢索所有字段:

[注意:id字段是默認添加的,因此要在選擇中將其刪除,我們特別使用-_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個文檔中的site字段,但是不必要地調用其余的900個字段。

我在Mongoose中使用了Lean.exec。

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

嘗試添加一個空的搜索查詢以選擇所有文檔

嘗試改變

由此:

fisSite.find(function(err, retVal) 

對此:

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

另外,嘗試執行console.log(retVal)來檢查您的發現是否實際上返回了任何值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM