MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Tri des résultats de la requête dans l'ordre des éléments dans le tableau des conditions fournies dans Mongoose

Considérant les données suivantes :

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

vous pouvez utiliser $match de Aggregation Framework pour filtrer tous les éléments qui ne sont pas présents dans le tableau spécifié et le $addFields avec $indexOfArray pour obtenir l'index propriété. Ensuite, vous pouvez $sort par cette propriété et utilisez $project pour supprimer le champ temporaire. Essayez :

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

Sorties :

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