使用req.body的Mongoose查询不返回正确的数据

时间:2017-01-15 14:32:51

标签: javascript node.js mongoose

我想使用Mongoose Model.find()函数从数据库中检索数据,传递我从req.body得到的任何参数以及参数req.user._id作为我的查询。

到目前为止,我所做的是将req.user._id放入req.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});
        });
    }

问题是;我一直在获取与我发送的查询不匹配的数据结果。我可能在这里做错了什么?

2 个答案:

答案 0 :(得分: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});
    });
}

答案 1 :(得分:0)

您定义了req.body.user = "" + req.params.id; 我不知道params.id是帖子中的Post.user。 无论如何,您的req.body成为{user: id }

我建议您打印出req.body的对象,看看它是否存在于mongodb的Post模型中。

此外,在mongodb中,生成的_id是ObjectId而不是string。您应该登录mongodb并了解数据的格式。

请参阅mongo中的以下示例:

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