MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Classificando registros de forma que apenas os registros que correspondam a um id venham primeiro?


Eu não acho que exista uma maneira direta de fazer isso, se você realmente quiser, tente $cond operador para verificar a condição em campo específico,
  • adicionar novo campo matchResult em $project ele verificará createdBy está correspondendo ao retorno 1, caso contrário, 0,
  • $sort por matchResult em ordem decrescente
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),
]);

Playground

A segunda opção é $regexMatch operador de agregação a partir do MongoDB v4.2,

Playground