2017-01-15 124 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