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:过滤器参数必须是一个对象的主要内容,如果未能解决你的问题,请参考以下文章