相当于维护数组顺序的数组中ObjectId的Mongoose `.popul`



MongoDB聚合在数组上与Mongoose的.populate等价吗?具体来说,我想知道是否有什么东西可以a(执行$lookup的功能,但b(仍然保持返回对象的数组顺序。

也就是说,查找[ ObjectId(b), ObjectId(a), ObjectId(c) ]中的项应该以相同的顺序返回数组[ ItemB, ItemA, ItemC ],并且而不是[ItemA, ItemB, ItemC]或任何其他排列。

一个选项是使用常规$lookup,然后对结果进行排序:

db.colA.aggregate([
{$lookup: {
from: "colB",
localField: "data",
foreignField: "_id",
as: "newData"
}},
{$set: {
newData: "$$REMOVE",
data: {
$map: {
input: "$data",
in: {$arrayElemAt: ["$newData", {$indexOfArray: ["$newData._id", "$$this"]}]}
}
}
}
}
])

看看它是如何在操场上工作的例子

最新更新