MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Trzeba sumować z wartości obiektu tablicy w mongodb

Nie działa poprawnie, ponieważ agreguje wszystkie dokumenty w kolekcji; grupujesz się na stałym "_id":"tempId" , wystarczy odwołać się do właściwego klucza, dodając $ jako:

db.getCollection('myCollection').aggregate([
    { "$group": {
        "_id": "$tempId",
        "totalValue": { 
            "$sum": { "$sum": "$messages.data.value" } 
        }
    } }
])

co w istocie jest jednoetapową wersją potoku operacji agregowanej z dodatkowym polem, które przechowuje wyrażenie sumy przed potoku grupy, a następnie wywołuje to pole jako $sum operatora w grupie.

Powyższe działa od $sum z MongoDB 3.2+ jest dostępny zarówno w $projekt i $group etapy i gdy są używane w $projekt etap, $sum zwraca sumę listy wyrażeń. Wyrażenie "$messages.data.value" zwraca listę liczb [120, 1200] które są następnie używane jako $sum wyrażenie:

db.getCollection('myCollection').aggregate([
    { "$project": {
        "values": { "$sum": "$messages.data.value" },
        "tempId": 1,
    } },
    { "$group": {
        "_id": "$tempId",
        "totalValue": { "$sum": "$values" }
    } }
])


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jaka jest różnica między metodami insert(), insertOne() i insertMany()?

  2. MongoDB:obniżona wydajność zapytań

  3. mongo-go-driver znajdź dokument według _id

  4. Korzystanie z mongodb do przechowywania danych dotyczących kapitału w ciągu dnia

  5. mangusta sumuje wartość we wszystkich dokumentach