【问题标题】:NodeJS & MongoDB - Get Objects based on array of idsNodeJS 和 MongoDB - 根据 id 数组获取对象
【发布时间】: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 上关注了多个其他答案,但都没有运气。

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')。我已经更新了我的服务器并重新启动,现在它似乎可以工作了。对我的困惑和缺乏知识深表歉意,但感谢尼尔的帮助。

标签: node.js mongodb mongoose mongodb-query objectid


【解决方案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
              }
            });
        });
    };

    【讨论】:

      猜你喜欢
      • 2020-02-20
      • 2023-01-22
      • 2022-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-14
      相关资源
      最近更新 更多