sql >> Base de Datos >  >> NoSQL >> MongoDB

Ordenar los resultados de la consulta por el orden de los elementos en la matriz de condiciones proporcionadas en Mongoose

Teniendo en cuenta los siguientes datos:

db.col.save({ a: "111"})
db.col.save({ a: "112"})
db.col.save({ a: "113"})
db.col.save({ a: "114"})

puede usar $match de Aggregation Framework para filtrar todos los elementos que no están presentes en la matriz especificada y $añadirCampos con $indexOfArray para obtener el index propiedad. Luego puede $sort por esa propiedad y use $project para eliminar el campo temporal. Prueba:

db.col.aggregate([
    {
        $match: { a: { $in: ["112", "111", "113"] } }
    },
    {
        $addFields: {
            index: { $indexOfArray: [ ["112", "111", "113"], "$a" ] }
        }
    },
    {
        $sort: { index: 1 }
    },
    {
        $project: { index: 0, _id: 0 }
    }
])

Salidas:

{ "a" : "112" }
{ "a" : "111" }
{ "a" : "113" }