sql >> Database >  >> NoSQL >> MongoDB

Records zo sorteren dat alleen records die overeenkomen met een id eerst komen?

Ik denk niet dat er een directe manier is om dit te doen. Als je het echt wilt, probeer dan $cond operator om de conditie van een specifiek veld te controleren,

  • voeg nieuw veld toe matchResult in $project het controleert createdBy komt overeen met return 1 anders 0,
  • $sort door matchResult in aflopende volgorde
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),
]);

Speeltuin

Tweede optie is $regexMatch aggregatie-operator vanaf MongoDB v4.2,

Speeltuin




  1. Hoe u het serveradres kunt krijgen van de server waarvan de gegevens worden opgehaald?

  2. 3 manieren om een ​​index te verbergen voor het queryplan in MongoDB

  3. Waarom wacht dit buiten de asynchrone functie?

  4. Kun je verbinding maken met Amazon ElastiСache Redis buiten Amazon?