sql >> Database teknologi >  >> NoSQL >> MongoDB

Mongodb aggregering:$reduce virker ikke som forventet

  • $max for at få maks. værdi fra key matrix af felt a , vil dette returnere -15 i henhold til dine dokumenter
  • $filter for at få et objekt, der er lig med -15 værdi
  • $first få det første objekt fra returneret resultat fra $filter
db.collection.aggregate([
  {
    $addFields: {
      winner: {
        $first: {
          $filter: {
            input: "$key",
            cond: { $eq: ["$$this.a", { $max: "$key.a" }] }
          }
        }
      }
    }
  }
])

Legeplads

Anden mulighed ved at bruge $reduce operatør,

  • indstil indledende felt maxValue i reducere, maksimal værdi fra key matrix af felt a
  • kontroller tilstanden hvis maxValue og a værdi match og returner derefter max objekt
db.collection.aggregate([
  {
    $addFields: {
      winner: {
        $reduce: {
          input: "$key",
          initialValue: { maxValue: { $max: "$key.a" } },
          in: {
            $cond: [
              { $eq: ["$$this.a", "$$value.maxValue"] },
              "$$this",
              "$$value"
            ]
          }
        }
      }
    }
  }
])

Legeplads




  1. MongoDB-tilgange til lagring af store mængder metrics/analysedata

  2. Matchbetingelser og seneste dato fra array

  3. Kan ikke oprette forbindelse til MongoDB Replica Set fra anden server ved hjælp af robo3T og i C#

  4. Sådan sikkerhedskopieres og gendannes ClusterControl