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

Sortere poster på en måde, så kun poster, der matcher et id, kommer først?

Jeg tror ikke, der er nogen lige måde at gøre dette på. Hvis du virkelig vil, så prøv $cond operatør for at kontrollere tilstanden på et specifikt felt,

  • tilføj nyt felt matchResult i $project det vil kontrollere createdBy matcher retur 1 ellers 0,
  • $sort af matchResult i faldende rækkefølge
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),
]);

Legeplads

Anden mulighed er $regexMatch aggregeringsoperator fra MongoDB v4.2,

Legeplads




  1. mongodb-forespørgsel:$size med $gt returnerer altid 0

  2. MongoDB $strcasecmp

  3. MongoDB NU Aggregationsvariabel

  4. Sådan implementerer du multitenancy til Redis i springstøvler