NodeJS 和 MongoDB - 根据 id 数组获取对象
Posted
技术标签:
【中文标题】NodeJS 和 MongoDB - 根据 id 数组获取对象【英文标题】:NodeJS & MongoDB - Get Objects based on array of ids 【发布时间】: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 的图像
我在 *** 上关注了多个其他答案,但都没有运气。
Gist to full project code
【问题讨论】:
从你的错误信息 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')。我已经更新了我的服务器并重新启动,现在它似乎可以工作了。对我的困惑和缺乏知识深表歉意,但感谢尼尔的帮助。
【参考方案1】:
最好的办法是:
Articles.find( _id : $in : yourArray );
希望对你有帮助
【讨论】:
【参考方案2】:这样做:
exports.list_favs = function(req, res)
Articles.find(
_id:
$in: [mongoose.Schema.ObjectId('59f85aXXXXf1769b94d53ce'),
mongoose.Schema.ObjectId('59f85eaeXXXX1769b94d53d3')]
,
function(err, articles)
if (err)
res.send(err);
else
res.json(
data:
articles
);
);
;
【讨论】:
以上是关于NodeJS 和 MongoDB - 根据 id 数组获取对象的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Id 使用 vuejs 编辑字段 mongodb、nodejs
尝试在 Nodejs 和 MongoDB 中获取当前登录的用户任务
从 NodeJS 原生 mongodb 驱动程序获取 MongoDB 操作 id 以用于 db.killOp