我想知道是否可以保持结果的当前顺序与过滤时传递的顺序相同。
假设我们有一个 IDS 数组:
var arrayValues = [1,3,2]
我想聚合这些值,但保持结果与我在上面数组中传递的顺序相同。
var result = Item.aggregate([{ $match: { _id: { $in: arrayValues } }}])
我希望结果的顺序与传入的数组值的顺序相同_id
value.
结果示例:
result = [{ _id: 1 },{ _id: 3 },{ _id: 2 }]
您可以使用indexOfArray
为了这:
db.collection.aggregate([
{$match: {_id: {$in: arrayValues}}},
{$set: {index: {$indexOfArray: [arrayValues, "$_id"]}}},
{$sort: {index: 1}},
{$unset: "index"}
])
看看它是如何工作的游乐场示例
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)