MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Sortowanie rekordów w taki sposób, aby tylko rekordy pasujące do identyfikatora były na pierwszym miejscu?

Nie sądzę, że można to zrobić w prosty sposób. Jeśli naprawdę chcesz, spróbuj $cond operatora, aby sprawdzić stan na określonym polu,

  • dodaj nowe pole matchResult w $project sprawdzi createdBy pasuje do zwrotu 1, w przeciwnym razie 0,
  • $sort przez matchResult w porządku malejącym
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),
]);

Plac zabaw

Druga opcja to $regexMatch operator agregacji począwszy od MongoDB v4.2,

Plac zabaw




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Warunkowo uwzględnij etapy potoku agregacji

  2. Aktualizacja w forEach w powłoce mongodb

  3. Napisz swojego pierwszego doradcę

  4. Wyszukiwarki Mongoidów nie działają?

  5. Łączenie Sparka z wieloma kolekcjami Mongo