2017-01-15 167 views
0

我想使用Mongoose Model.find()函數從數據庫中檢索數據,將從req.body獲得的任何參數以及參數req.user._id作爲我的查詢傳遞。使用req.body不能返回正確數據的貓鼬查詢

到目前爲止,我所做的事情就是把我req.user._idreq.body然後將它們裏面Post.find()如下:

getUserPosts: function(req, res) { 
     req.body.user = "" + req.params.id; 
     var query = JSON.stringify(req.body); 
     Post.find(query, function(err, posts) { 
      if(err) return res.status(500).json({error: unknownError}); 
      else if(posts) return res.status(200).json({posts}); 
     }); 
    } 

的問題是;我不斷收到與我發送的查詢不符的數據結果。我可能在這裏做錯了什麼?

回答

1

首先...刪除JSON.stringify一部分。查詢參數需要包含字段名稱(鍵)的鍵/值對象,字段名稱(鍵)應與指定的值匹配。例如var query = {_id:req.body._id}。

第二...這是什麼req.body.user = req.params.id

最終代碼:

getUserPosts: function(req, res) { 
    var query = { _id: req.params.id }; 
    Post.find(query, function(err, posts) { 

     if(err) return res.status(500).json({error: unknownError}); 
     else if(posts) return res.status(200).json({posts}); 
    }); 
} 
+0

我在'req.body'中添加了一個字段'user',它等於'req.params.id'字段,因此我可以發送如下查詢:'{status:2, user:'586a24d9319242157dcd796e'}'用戶的值是'req.params.id'。 – SalmaFG

+0

這個問題真的是'JSON.stringify'。我以爲我之前沒有嘗試過它,它並沒有工作,但顯然不是。非常感謝! – SalmaFG

+0

爲什麼在req.body&params的兩個字段中傳遞相同的值?還有爲什麼在函數中覆蓋它?對不起,但我無法理解。所以,請告訴我以下幾點:**(A)** staus的值2來自哪裏?請求體是固定的還是收到的? **(B)** req.body.user或req.params.id中的ObjectId值 –

0

您定義了req.body.user = "" + req.params.id; 我不知道params.id是否是帖子中的Post.user。 不管,你req.body成爲{用戶:ID}

我建議你打印出req.body的對象,看它是否存在於您的mongodb Post模型。

此外,在mongodb中,生成的_id是ObjectId而不是字符串。你應該登錄到MongoDB並理解數據的格式。

請看下面的例子中蒙戈:

> db.Post.find({"_id":"5786d286ed4b71f473efbd99"}) 
// nothing 
> db.Post.find({"_id":ObjectId("5786d286ed4b71f473efbd99")}) 
{ "_id" : ObjectId("5786d286ed4b71f473efbd99"), "created" : ISODate("2016-07-13T23:45:10.522Z") } 
+1

但我並沒有直接使用MongoDB的查詢。我使用Mongoose和'id'作爲Mongoose中的字符串很好。 – SalmaFG