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

Datensätze so sortieren, dass nur Datensätze, die mit einer ID übereinstimmen, zuerst kommen?

Ich glaube nicht, dass es dafür einen direkten Weg gibt. Wenn Sie es wirklich wollen, versuchen Sie es mit $cond Operator, um die Bedingung für ein bestimmtes Feld zu prüfen,

  • Neues Feld hinzufügen matchResult in $project es prüft createdBy stimmt überein Rückgabe 1 sonst 0,
  • $sort nach matchResult in absteigender Reihenfolge
const [messages, messageCount] = await Promise.all([
    MessageModel.aggregate([
        { $match: params },
        {
            $project: {
                ...filterObject,
                matchResult: {
                    $cond: [
                      { $eq: ["$createdBy", ObjectId("abcff9ef71fa048cea3c8a97")] },
                      1,
                      0
                    ]
                }
            }
        },
        { $sort: { matchResult: -1 } },
        { $skip: ctx.paginate.skip },
        { $limit: ctx.query.limit }
    ]),
    MessageModel.countDocuments(params),
]);

Spielplatz

Die zweite Option ist $regexMatch Aggregationsoperator ab MongoDB v4.2,

Spielplatz