猫鼬-如何从一组对象ID中找到集合

时间:2020-01-21 04:04:57

标签: node.js mongodb mongoose

可以说我在对象ID上有一个数组:

[ 1, 2, 3, 4, 5 ]

,我有一个名为user的集合,其中包含以下值:

[
  {
     _id: 3,
     name: 'hehe'
  },

  {
     _id: 5,
     name: 'hehe1'
  },

  {
     _id: 2,
     name: 'hehe2'
  },

  {
     _id: 1,
     name: 'hehe3'
  },

  {
     _id: 4,
     name: 'hehe4'
  },

  {
     _id: 6,
     name: 'hehe5'
  }
]

我如何向“用户”集合查询数组对象ID? 哪个结果应该与对象ID数组的顺序相同,这可能吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用$in来过滤文档,然后可以使用$indexOfArray添加可以用作$sort的键的特殊字段:

db.collection.aggregate([
    {
        $match: { _id: { $in: [ 1, 2, 3, 4, 5 ] } }
    },
    {
        $addFields: { idx: { $indexOfArray: [ [ 1, 2, 3, 4, 5 ], "$_id" ] } }
    },
    {
        $sort: { idx: 1 }
    }
])

Mongo Playground

答案 1 :(得分:0)

要获取ID数组的文档,可以按以下方式使用$in

collection.find( { key: { $in: [array] }}, callback );

注意:

不建议使用文档顺序来做一些逻辑。我们不能一直期望订单相同。