可以说我在对象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数组的顺序相同,这可能吗?
谢谢!
答案 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 }
}
])
答案 1 :(得分:0)
要获取ID数组的文档,可以按以下方式使用$in
collection.find( { key: { $in: [array] }}, callback );
注意:
不建议使用文档顺序来做一些逻辑。我们不能一直期望订单相同。