sql >> Databáze >  >> NoSQL >> MongoDB

Řadit záznamy tak, aby na prvním místě byly pouze záznamy, které odpovídají id?

Nemyslím si, že existuje nějaký přímý způsob, jak to udělat, pokud to opravdu chcete, zkuste $cond operátor pro kontrolu stavu na konkrétním poli,

  • přidat nové pole matchResult v $project zkontroluje createdBy odpovídá návrat 1, jinak 0,
  • $sort podle matchResult v sestupném pořadí
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),
]);

Hřiště

Druhá možnost je $regexMatch operátor agregace počínaje MongoDB v4.2,

Hřiště




  1. Zkontrolujte, zda dokument existuje v mongodb pomocí es7 async/await

  2. mongodb více dokumentů vložit nebo aktualizovat pomocí jedinečného klíče

  3. pochopit systém mezipaměti MongoDB

  4. Jak mohu použít kurzor.forEach() v MongoDB pomocí Node.js?