sql >> Database >  >> NoSQL >> MongoDB

Mongodb-aggregatie:$reduce werkt niet zoals verwacht

  • $max om maximale waarde te krijgen van key array van veld a , dit geeft -15 . terug volgens uw documenten
  • $filter om een ​​object te krijgen dat gelijk is aan -15 waarde
  • $first haal het eerste object uit het geretourneerde resultaat van $filter
db.collection.aggregate([
  {
    $addFields: {
      winner: {
        $first: {
          $filter: {
            input: "$key",
            cond: { $eq: ["$$this.a", { $max: "$key.a" }] }
          }
        }
      }
    }
  }
])

Speeltuin

Tweede optie met $reduce telefoniste,

  • initieel veld instellen maxValue in verkleinen, maximale waarde van key array van veld a
  • controleer de voorwaarde als maxValue en a waarde match en retourneer max object
db.collection.aggregate([
  {
    $addFields: {
      winner: {
        $reduce: {
          input: "$key",
          initialValue: { maxValue: { $max: "$key.a" } },
          in: {
            $cond: [
              { $eq: ["$$this.a", "$$value.maxValue"] },
              "$$this",
              "$$value"
            ]
          }
        }
      }
    }
  }
])

Speeltuin




  1. MongoDB $setUnion

  2. hoe toegang te krijgen tot socketsessie in alle clusters

  3. Hoe mongodb-gegevens en de locatie van logbestanden te vinden via een opdracht?

  4. mongoDB:zoeken op ingesloten waarde