sql >> Databasteknik >  >> NoSQL >> MongoDB

Sortera poster på ett sätt så att endast poster som matchar ett id kommer först?

Jag tror inte att det finns något rakt sätt att göra detta. Om du verkligen vill, försök med $cond operatör för att kontrollera skick på specifikt fält,

  • lägg till nytt fält matchResult i $project den kommer att kontrollera createdBy matchar retur 1 annars 0,
  • $sort av matchResult i fallande ordning
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),
]);

Lekplats

Det andra alternativet är $regexMatch aggregeringsoperator från MongoDB v4.2,

Lekplats




  1. Bästa MongoDB-schemat för twitter-klon?

  2. Node.js multi-server kluster:hur man delar objekt i flera nodkluster

  3. Alla namnservrar kunde inte svara UDP-port 53 Googles molnfunktioner python 3.7 atlas mongodb

  4. ember js association access backend nodejs mongoose