MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Агрегиране на Mongodb:$reduce не работи според очакванията

  • $max за да получите максимална стойност от key масив от поле a , това ще върне -15 според вашите документи
  • $filter за да получите обект, който е равен на -15 стойност
  • $first вземете първия обект от върнат резултат от $filter
db.collection.aggregate([
  {
    $addFields: {
      winner: {
        $first: {
          $filter: {
            input: "$key",
            cond: { $eq: ["$$this.a", { $max: "$key.a" }] }
          }
        }
      }
    }
  }
])

Playground

Втора опция, използваща $reduce оператор,

  • задаване на начално поле maxValue в намаляване, максимална стойност от key масив от поле a
  • проверете условието, ако maxValue и a съвпадение на стойността, след което върне максимален обект
db.collection.aggregate([
  {
    $addFields: {
      winner: {
        $reduce: {
          input: "$key",
          initialValue: { maxValue: { $max: "$key.a" } },
          in: {
            $cond: [
              { $eq: ["$$this.a", "$$value.maxValue"] },
              "$$this",
              "$$value"
            ]
          }
        }
      }
    }
  }
])

Playground




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. как да направите правилното удостоверяване на mongodb

  2. Как да добавите индекси в проект mongoDB с рамка Morphia

  3. Как да агрегираме реактивно mongodb в meteor

  4. Изчакване на връзката за mongodb с помощта на mongoose

  5. Обработете загубената връзка към mongo db от nodejs