MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Ordinare i record in modo tale che solo i record che corrispondono a un ID vengano prima?

Non penso che ci sia un modo diretto per farlo, se vuoi davvero prova $cond operatore per verificare la condizione su un campo specifico,

  • aggiungi nuovo campo matchResult in $project controllerà createdBy corrisponde a ritorno 1 altrimenti 0,
  • $sort per matchResult in ordine 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),
]);

Parco giochi

La seconda opzione è $regexMatch operatore di aggregazione a partire da MongoDB v4.2,

Parco giochi