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"]}]}
}
}
}
}
])
看看它是如何在操场上工作的例子