MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Trier les enregistrements de manière à ce que seuls les enregistrements correspondant à un identifiant apparaissent en premier ?

Je ne pense pas qu'il existe un moyen direct de le faire, si vous voulez vraiment essayer $cond l'opérateur pour vérifier l'état d'un champ spécifique,

  • ajouter un nouveau champ matchResult dans $project il vérifiera createdBy correspond à return 1 sinon 0,
  • $sort par matchResult par ordre décroissant
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),
]);

Aire de jeux

La deuxième option est $regexMatch opérateur d'agrégation à partir de MongoDB v4.2,

Aire de jeux