sql >> Databáze >  >> NoSQL >> MongoDB

Agregace Mongodb:$reduce nefunguje podle očekávání

  • $max získat maximální hodnotu z key pole pole a , vrátí to -15 podle vašich dokumentů
  • $filter získat objekt rovný -15 hodnotu
  • $first získat první objekt z vráceného výsledku z $filter
db.collection.aggregate([
  {
    $addFields: {
      winner: {
        $first: {
          $filter: {
            input: "$key",
            cond: { $eq: ["$$this.a", { $max: "$key.a" }] }
          }
        }
      }
    }
  }
])

Hřiště

Druhá možnost pomocí $reduce operátor,

  • nastavte počáteční pole maxValue v redukovat, maximální hodnota z key pole pole a
  • zkontrolujte podmínku, pokud maxValue a a value match pak vrátí max object
db.collection.aggregate([
  {
    $addFields: {
      winner: {
        $reduce: {
          input: "$key",
          initialValue: { maxValue: { $max: "$key.a" } },
          in: {
            $cond: [
              { $eq: ["$$this.a", "$$value.maxValue"] },
              "$$this",
              "$$value"
            ]
          }
        }
      }
    }
  }
])

Hřiště




  1. Jak získat vysvětlení pro počet MongoDB?

  2. Play Framework 2.5 jak přidat mongoDB?

  3. Aktualizujte jedno pole v MongoDB v jediném vloženém dokumentu

  4. Mongoose seřadit podle obsazeného pole