sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Ordenar registros de manera que solo los registros que coincidan con una identificación aparezcan primero?

No creo que haya una forma directa de hacer esto. Si realmente quieres, prueba $cond operador para verificar la condición en un campo específico,

  • añadir nuevo campo matchResult en $project comprobará createdBy coincide con return 1 de lo contrario 0,
  • $sort por matchResult en orden descendente
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),
]);

Patio de juegos

La segunda opción es $regexMatch operador de agregación a partir de MongoDB v4.2,

Patio de juegos