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

mongodb morphia怎么获取最大的id

尝试在 Nodejs 和 MongoDB 中获取当前登录的用户任务

从 NodeJS 原生 mongodb 驱动程序获取 MongoDB 操作 id 以用于 db.killOp

如何根据保存的 mongodb 文档数据调度/排队任务 [NodeJS]

nodejs mongodb对象ID到字符串