NodeJS& MongoDB - 根据id数组获取对象

时间:2017-11-01 10:26:26

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

我无法在基于ObjectIds数组的集合中返回对象。

我有10个项目的集合。在iOS应用程序中,我传递了一个用户保存为收藏夹的ObjectIds数组,以便在收藏夹选项卡中返回这两个,例如 -

["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的图像

enter image description here

我已经在StackOverflow上跟随了多个其他答案而没有运气。

Gist to full project code

2 个答案:

答案 0 :(得分:0)

这样做:

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
          }
        });
    });
};

答案 1 :(得分:-1)

最好的方法是:

Articles.find( { _id : { $in : yourArray } } );

希望这对您有帮助