sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongodb-aggregation:$reduce fungerar inte som förväntat

  • $max för att få maxvärde från key array av fält a , detta returnerar -15 enligt dina dokument
  • $filter för att få objekt som är lika med -15 värde
  • $first hämta första objektet från returnerat resultat från $filter
db.collection.aggregate([
  {
    $addFields: {
      winner: {
        $first: {
          $filter: {
            input: "$key",
            cond: { $eq: ["$$this.a", { $max: "$key.a" }] }
          }
        }
      }
    }
  }
])

Lekplats

Andra alternativet med $reduce operatör,

  • ställ in initialfältet maxValue i reducera, maximalt värde från key array av fält a
  • kontrollera skick om maxValue och a värdematchning returnerar sedan maxobjekt
db.collection.aggregate([
  {
    $addFields: {
      winner: {
        $reduce: {
          input: "$key",
          initialValue: { maxValue: { $max: "$key.a" } },
          in: {
            $cond: [
              { $eq: ["$$this.a", "$$value.maxValue"] },
              "$$this",
              "$$value"
            ]
          }
        }
      }
    }
  }
])

Lekplats




  1. Använder Redis som mellanliggande cache för REST API

  2. Duplicera dokument på _id (på mongo)

  3. Det gick inte att ansluta till mongolab. Få MongoError:auth misslyckades

  4. Hur kan jag förbättra MongoDB-bulkprestanda?