MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Sortieren von Abfrageergebnissen nach der Reihenfolge der Elemente im bereitgestellten Bedingungsarray in Mongoose

Unter Berücksichtigung folgender Daten:

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

Sie können $match von Aggregation Framework verwenden um alle Elemente herauszufiltern, die nicht im angegebenen Array und dem $addFields mit $indexOfArray um den index zu erhalten Eigentum. Dann können Sie $sortieren durch diese Eigenschaft und verwenden Sie $project temporäres Feld zu entfernen. Versuchen Sie:

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

Ausgaben:

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