MongoError:过滤器参数必须是一个对象

Posted

技术标签:

【中文标题】MongoError:过滤器参数必须是一个对象【英文标题】:MongoError: filter parameter must be an object 【发布时间】: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 。简而言之,您似乎忘记删除测试并将变量添加到错误的位置。 【参考方案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 方法有问题,再检查一次,如果这是正确的方法,右括号都很好 github.com/freespiritdev/Media/blob/… 答案有帮助吗?

以上是关于MongoError:过滤器参数必须是一个对象的主要内容,如果未能解决你的问题,请参考以下文章

Django框架自定义标签和过滤器

Python 数据处理(三十九)—— groupby(过滤)

js中filter过滤用法总结

vue相关API

字段必须是 BSON 类型的对象

使用重复参数而不是链接过滤器时,如何使用 Q 对象进行 AND 查找?