Me gustaría saber si es posible mantener el orden actual del resultado igual al que se pasa en el filtrado.
Así que digamos que tenemos una matriz de IDS:
var arrayValues = [1,3,2]Me gustaría agregar los valores pero mantener el resultado en el mismo orden que estoy pasando en la matriz anterior.
var result = Item.aggregate([{ $match: { _id: { $in: arrayValues } }}]) Quisiera el resultado en el mismo orden que los valores de matriz pasados como valor _id .
Resultado de ejemplo:
result = [{ _id: 1 },{ _id: 3 },{ _id: 2 }]Puedes usar indexOfArray para esto:
db.collection.aggregate([ {$match: {_id: {$in: arrayValues}}}, {$set: {index: {$indexOfArray: [arrayValues, "$_id"]}}}, {$sort: {index: 1}}, {$unset: "index"} ])Vea cómo funciona en el ejemplo del patio de recreo