【问题标题】:MongoError: filter parameter must be an objectMongoError:过滤器参数必须是一个对象
【发布时间】:2018-11-24 07:11:48
【问题描述】:

我正在创建一个休息 api 我有帖子/电影的终点:请求正文应该只包含电影标题,并且应该验证它的存在基于传递的标题,应该从 thememoviedb 获取其他电影详细信息,并保存到应用程序数据库。

app.post('/movies', (req, res) => {
        request('https://api.themoviedb.org/3/discover/movie?callback=JSONP_CALLBACK&sort_by=popularity.desc&api_key=2931998c3a80d7806199320f76d65298', function (error, response, body) {
            console.log('error:', error); // Print the error if one occurred and handle it
            console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received

          });
        db.collection('movies').findOneAndUpdate(req.body.title,{
            title: 'Avengers',
        },(err, result) => {
            if (err) {
                res.send({
                    'error': 'An error has occured'
                });
            } else {
                res.send(result.ops[0]);
            }
        });
});

当我运行应用程序时出现此错误,我在这里做错了什么,?我是 nodejs 新手,所有这些东西都在学习

【问题讨论】:

  • req.body.title 不是“对象”。实际上,它看起来像是一个错字,因为接下来{ title: 'Avengers' } 就是您的意思。或者可能是{ title: req.body.title }。简而言之,您似乎忘记删除测试并将变量添加到错误的位置。

标签: javascript mongodb express mongoose


【解决方案1】:

在过滤器对象$eq中使用$eq运算符

{ <field>: { $eq: <value> } }

所以最终的sn-p变成了这样:

app.post('/movies', (req, res) => {

    /* code ... */

    let { title } = req.body

    db.collection('movies').findOneAndUpdate({ title: { $eq: title } }, { title: 'Avengers' }, (err, result) => {
        if (err) {
            res.send({ 'error': 'An error has occured' });
        } else {
            res.send(result.ops[0]);
        }
    });

});

【讨论】:

  • 当我运行 localhost: 8000/movies 我在控制台中出现错误 TypeError: Cannot read property '0' of undefined , in post man , could not get any rensponse.
  • 试试 console.log(result) 看看 JSON 的结构是怎样的
  • 这是我得到的:We are live on 8000 { lastErrorObject: { updatedExisting: false, n: 0 }, value: null, ok: 1 } error: null statusCode: 200
【解决方案2】:

试试下面的,

db.collection('movies').findOneAndUpdate({title:req.body.title},{
          $set:{
           'Avengers'
          }})

【讨论】:

  • 意外令牌,} ?
  • 可能我没有正确关闭它,检查你代码中的关闭{
  • set 方法有问题,再检查一次,如果这是正确的方法,右括号都很好
  • 答案有帮助吗?
猜你喜欢
  • 2017-10-20
  • 1970-01-01
  • 2017-02-10
  • 2021-12-21
  • 1970-01-01
  • 2019-05-19
  • 1970-01-01
  • 1970-01-01
  • 2019-04-04
相关资源
最近更新 更多