【发布时间】:2018-04-13 15:27:39
【问题描述】:
我在返回基于 ObjectId 数组的集合中获取对象时遇到问题。
我收藏了 10 件商品。在 iOS 应用程序中,我传递了一组 ObjectId,用户已将其保存为收藏夹,以仅在收藏夹选项卡中返回这两个,例如 -
["59f85eae4545XXX9b94d53d3", "59f85eae45454XXXb94d76a1"]
现在,我刚刚使用 NodeJS 对请求顶部的 ObjectIds 进行了硬编码,直到我让请求正常工作,下面是请求 -
exports.list_favs = function(req, res) {
Articles.find({
_id: { $in: [
mongoose.Types.ObjectId('59f85aXXXXf1769b94d53ce'),
mongoose.Types.ObjectId('59f85eaeXXXX1769b94d53d3')
]}
}, function(err, articles) {
if (err)
res.send(err);
res.json({
data: {
articles
}
});
});
};
我什至试过这个 -
exports.list_favs = function(req, res) {
var ids = new Array( new ObjectId("59f85eaeXXXX1769b94d53d3"), new
ObjectId("59f85aXXXXf1769b94d53ce") );
Articles.find({
_id: { $in: ids}
}, function(err, articles) {
if (err)
res.send(err);
res.json({
data: {
articles
}
});
});
};
这两个都给我一个错误“CastError”
"Cast to ObjectId failed for value \"favourites\" at path \"_id\" for model \"Articles\""
这就是它在数据库中的样子,所以我完全不知道自己做错了什么。数据库中 ObjectId 的图像
我在 StackOverflow 上关注了多个其他答案,但都没有运气。
【问题讨论】:
-
从你的错误信息 failed for value \"favourites\" 这实际上告诉我们这是通过传递与你所说的不同的东西而产生的。错误表示您正在传递“字符串”
"favourites"。我猜这实际上是代表一个列表的 JSON 字符串,而您之所以会这样,是因为您在问题中未包含的代码的其他地方做错了。 -
我明白你的意思,但我不确定它可以在哪里传递。我只是在邮递员中调用以下内容。 app.route('/articles/favourites').get(articleList.list_favs)
-
这就是用于该调用的所有代码,而不是 Articles 的 Schema 类。
-
您被告知的是您提出的问题显示“硬编码”值。但错误信息另有说明。 This is not the code where the error is coming from 错误告诉我们。一定要显示架构。但还要检查您的代码,您实际上没有“两次”定义相同的路线。错误信息非常具体和清晰。
-
我看到了我的错误,但仍然有些困惑,我之前有一个接受单个 id 参数的请求,例如 app.route('/articles/:id')。我已经更新了我的服务器并重新启动,现在它似乎可以工作了。对我的困惑和缺乏知识深表歉意,但感谢尼尔的帮助。
标签: node.js mongodb mongoose mongodb-query objectid