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

Agregacja Mongodb:$reduce nie działa zgodnie z oczekiwaniami

  • $max aby uzyskać maksymalną wartość z key tablica pola a , to zwróci -15 zgodnie z twoimi dokumentami
  • $filter aby uzyskać obiekt równy -15 wartość
  • $first pobierz pierwszy obiekt ze zwróconego wyniku z $filter
db.collection.aggregate([
  {
    $addFields: {
      winner: {
        $first: {
          $filter: {
            input: "$key",
            cond: { $eq: ["$$this.a", { $max: "$key.a" }] }
          }
        }
      }
    }
  }
])

Plac zabaw

Druga opcja przy użyciu $reduce operator,

  • ustaw pole początkowe maxValue w zmniejszeniu, maksymalna wartość z key tablica pola a
  • sprawdź warunek, jeśli maxValue i a dopasowanie wartości, a następnie zwróć maksymalny obiekt
db.collection.aggregate([
  {
    $addFields: {
      winner: {
        $reduce: {
          input: "$key",
          initialValue: { maxValue: { $max: "$key.a" } },
          in: {
            $cond: [
              { $eq: ["$$this.a", "$$value.maxValue"] },
              "$$this",
              "$$value"
            ]
          }
        }
      }
    }
  }
])

Plac zabaw




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. db.getUser w node.js mongodb

  2. Uwierzytelnianie MongoDB nie jest włączone na serwerze Linux

  3. Jeśli Mongo $lookup to lewe sprzężenie zewnętrzne, to dlaczego wyklucza niepasujące dokumenty?

  4. Usuń zagnieżdżone pola ze wszystkich/wielu dokumentów w kolekcji - NodeJS + MongoDB

  5. Mongo nie może się uruchomić