Bidang array jumlah agregat mongodb

Kamran Ahmad. [0. 00] Di sini, di koleksi tweet kami, kami memiliki dokumen terpisah untuk setiap tweet dari pengguna tertentu. Kalau kita lihat tweet pertama itu dari screen_name jsbot, kalau kita lihat tweet kedua itu lagi dari jsbot, kalau kita lihat tweet ketiga itu dari user. screen_name FCBarcelona

[0. 15] Katakanlah kita ingin menghitung jumlah tweet dari masing-masing pengguna dalam koleksi ini. Untuk itu kita bisa menggunakan agregat. Saya akan melakukan db. tweet. agregat

[0. 23] Baris pertama kita adalah $group. $group adalah objek, dengan bidang pertama sebagai _id, yang merupakan kolom yang ingin Anda kelompokkan

[0. 30] Dalam kasus kami, kami ingin mengelompokkan pengguna. screen_name, jadi saya akan melakukan $user. screen_name, dan parameter proyek lainnya Kami ingin menghitung, jadi saya akan memiliki bidang lain yang disebut hitungan, dan kami akan membuatnya menggunakan jumlah 1

[0. 44] Jika saya menjalankan kueri ini, Anda akan melihat bahwa kami mendapatkan dokumen itu, dan di setiap dokumen kami memiliki nama_pengguna sebagai id, yang ini, dan dalam hitungan kami mendapatkan jumlah tweet dari pengguna ini. Jumlah kami dalam hal ini lakukan adalah kapan pun menemukan pengguna. screen_name dan terus menyiapkan grup, jika sudah memiliki grup untuk itu, terus tambahkan satu ke dalamnya. Dalam hal ini, untuk LFC, setiap kali menemukan pengguna baru. ScreenName dengan LFC, itu terus menambahkan satu ke bidang saat ini

[1. 08] Sebagai penjumlahan, kami juga dapat memberikan bidang apa pun dari dokumen yang kami miliki. Jika Anda melihat koleksi tweet, kami memiliki Bidang Hitungan Favorit di setiap dokumen

[1. 15] Katakanlah kita ingin mendapatkan jumlah "Suka" yang dimiliki masing-masing akun di tweet mereka. Yang akan saya lakukan sekarang adalah mengganti jumlah dengan Jumlah Tweet, dan saya akan menambahkan bidang lain yang disebut Jumlah Favorit, yang akan menjadi jumlah Jumlah Favorit Bidang

[1. 28] Jika saya menjalankan [tidak terdengar] , Anda akan melihat bahwa di setiap dokumen kami mendapatkan Jumlah Tweet dan Jumlah Favorit. Firefox sekarang memiliki satu tweet, dan Total Favorit yang mereka dapatkan adalah 14. Jika Anda melihat Yahoo, mereka memiliki 11 tweet dan Jumlah Favorit Total yang mereka miliki adalah 21

[1. 41] Mari kita mulai lagi dengan pengguna dari orang yang paling banyak men-tweet. Untuk itu, saya akan menambahkan tahap lain bernama Sort. Kami akan mengurutkan berdasarkan jumlah tweet dalam urutan menurun

[1. 49] Jika saya menjalankan [tidak terdengar] , Anda akan melihat bahwa GsBot memiliki tweet terbanyak, 226. Yang kedua adalah 51, dan yang ketiga adalah 50

[1. 56] Jika Anda ingin mendapatkan daftar semua pengguna yang men-tweet lebih sedikit dari siapa pun, kami dapat melakukan +1, jadi ini akan menjadi urutan menaik sekarang. Yang ini punya satu tweet. Yang kedua memiliki satu tweet lagi, dan seterusnya

Data Anda dari perintah array berbeda dari input. Jika Anda memiliki input yang diberikan, kueri berikut akan berfungsi

db.game.aggregate([
 {$unwind: "$array"}, 
 {$group:{"_id" : "$array.ToId", "pointCount": {$sum:"$array.point"}}}, 
 {$project: {_id: 0, "ToId":"$_id", "pointCount": 1}}
 ]) 

Lebih banyak pertanyaan dengan tag serupa


Saat digunakan dalam tahapan,

{ $sum: <expression> }
2 memiliki sintaks berikut dan mengembalikan jumlah kolektif semua nilai numerik yang dihasilkan dari penerapan ekspresi tertentu ke setiap dokumen dalam grup dokumen yang berbagi grup yang sama dengan kunci

{ $sum: <expression> }
_

Saat digunakan dalam tahapan,

{ $sum: <expression> }
2 mengembalikan jumlah dari ekspresi yang ditentukan atau daftar ekspresi untuk setiap dokumen dan memiliki salah satu dari dua sintaks

  • { $sum: <expression> }
    
    _2 memiliki satu ekspresi tertentu sebagai operannya

    { $sum: <expression> }
    
    _

  • { $sum: <expression> }
    
    _2 memiliki daftar ekspresi tertentu sebagai operannya

    { $sum: [ <expression1>, <expression2> ... ]  }
    

Untuk informasi lebih lanjut tentang ekspresi, lihat

Perilaku

Bidang Non-Numerik atau Tidak Ada

Jika digunakan pada bidang yang berisi nilai numerik dan non-numerik,

{ $sum: <expression> }
2 mengabaikan nilai non-numerik dan mengembalikan jumlah nilai numerik

Jika digunakan pada bidang yang tidak ada dalam dokumen apa pun dalam koleksi,

{ $sum: <expression> }
2 mengembalikan
{ $sum: [ <expression1>, <expression2> ... ]  }
6 untuk bidang itu

Jika semua operan non-numerik,

{ $sum: <expression> }
2 mengembalikan
{ $sum: [ <expression1>, <expression2> ... ]  }
6

ExampleField ValuesResults
{ $sum: [ <expression1>, <expression2> ... ]  }
9
{ "_id" : 1, "item" : "abc", "price" : 10, "quantity" : 2, "date" : ISODate("2014-01-01T08:00:00Z") }
{ "_id" : 2, "item" : "jkl", "price" : 20, "quantity" : 1, "date" : ISODate("2014-02-03T09:00:00Z") }
{ "_id" : 3, "item" : "xyz", "price" : 5, "quantity" : 5, "date" : ISODate("2014-02-03T09:05:00Z") }
{ "_id" : 4, "item" : "abc", "price" : 10, "quantity" : 10, "date" : ISODate("2014-02-15T08:00:00Z") }
{ "_id" : 5, "item" : "xyz", "price" : 5, "quantity" : 10, "date" : ISODate("2014-02-15T09:05:00Z") }
0
{ "_id" : 1, "item" : "abc", "price" : 10, "quantity" : 2, "date" : ISODate("2014-01-01T08:00:00Z") }
{ "_id" : 2, "item" : "jkl", "price" : 20, "quantity" : 1, "date" : ISODate("2014-02-03T09:00:00Z") }
{ "_id" : 3, "item" : "xyz", "price" : 5, "quantity" : 5, "date" : ISODate("2014-02-03T09:05:00Z") }
{ "_id" : 4, "item" : "abc", "price" : 10, "quantity" : 10, "date" : ISODate("2014-02-15T08:00:00Z") }
{ "_id" : 5, "item" : "xyz", "price" : 5, "quantity" : 10, "date" : ISODate("2014-02-15T09:05:00Z") }
1
{ $sum: [ <expression1>, <expression2> ... ]  }
9
{ "_id" : 1, "item" : "abc", "price" : 10, "quantity" : 2, "date" : ISODate("2014-01-01T08:00:00Z") }
{ "_id" : 2, "item" : "jkl", "price" : 20, "quantity" : 1, "date" : ISODate("2014-02-03T09:00:00Z") }
{ "_id" : 3, "item" : "xyz", "price" : 5, "quantity" : 5, "date" : ISODate("2014-02-03T09:05:00Z") }
{ "_id" : 4, "item" : "abc", "price" : 10, "quantity" : 10, "date" : ISODate("2014-02-15T08:00:00Z") }
{ "_id" : 5, "item" : "xyz", "price" : 5, "quantity" : 10, "date" : ISODate("2014-02-15T09:05:00Z") }
3
{ "_id" : 1, "item" : "abc", "price" : 10, "quantity" : 2, "date" : ISODate("2014-01-01T08:00:00Z") }
{ "_id" : 2, "item" : "jkl", "price" : 20, "quantity" : 1, "date" : ISODate("2014-02-03T09:00:00Z") }
{ "_id" : 3, "item" : "xyz", "price" : 5, "quantity" : 5, "date" : ISODate("2014-02-03T09:05:00Z") }
{ "_id" : 4, "item" : "abc", "price" : 10, "quantity" : 10, "date" : ISODate("2014-02-15T08:00:00Z") }
{ "_id" : 5, "item" : "xyz", "price" : 5, "quantity" : 10, "date" : ISODate("2014-02-15T09:05:00Z") }
4
{ $sum: [ <expression1>, <expression2> ... ]  }
9
{ "_id" : 1, "item" : "abc", "price" : 10, "quantity" : 2, "date" : ISODate("2014-01-01T08:00:00Z") }
{ "_id" : 2, "item" : "jkl", "price" : 20, "quantity" : 1, "date" : ISODate("2014-02-03T09:00:00Z") }
{ "_id" : 3, "item" : "xyz", "price" : 5, "quantity" : 5, "date" : ISODate("2014-02-03T09:05:00Z") }
{ "_id" : 4, "item" : "abc", "price" : 10, "quantity" : 10, "date" : ISODate("2014-02-15T08:00:00Z") }
{ "_id" : 5, "item" : "xyz", "price" : 5, "quantity" : 10, "date" : ISODate("2014-02-15T09:05:00Z") }
6
{ $sum: [ <expression1>, <expression2> ... ]  }
6

Operan Larik

Pada tahap, jika ekspresi diselesaikan menjadi array,

{ $sum: <expression> }
2 memperlakukan operan sebagai nilai non-numerik

Di panggung

  • Dengan ekspresi tunggal sebagai operannya, jika ekspresi tersebut memutuskan ke sebuah array,
    { $sum: <expression> }
    
    2 melintasi ke dalam array untuk beroperasi pada elemen numerik dari array untuk mengembalikan nilai tunggal
  • Dengan daftar ekspresi sebagai operannya, jika salah satu ekspresi memutuskan ke array,
    { $sum: <expression> }
    
    2 tidak melintasi ke dalam array tetapi sebaliknya memperlakukan array sebagai nilai non-numerik

Contoh

Gunakan di Tahap { $sum: <expression> } _4

Pertimbangkan koleksi

db.sales.aggregate(
   [
     {
       $group:
         {
           _id: { day: { $dayOfYear: "$date"}, year: { $year: "$date" } },
           totalAmount: { $sum: { $multiply: [ "$price", "$quantity" ] } },
           count: { $sum: 1 }
         }
     }
   ]
)
_4 dengan dokumen-dokumen berikut

{ "_id" : 1, "item" : "abc", "price" : 10, "quantity" : 2, "date" : ISODate("2014-01-01T08:00:00Z") }
{ "_id" : 2, "item" : "jkl", "price" : 20, "quantity" : 1, "date" : ISODate("2014-02-03T09:00:00Z") }
{ "_id" : 3, "item" : "xyz", "price" : 5, "quantity" : 5, "date" : ISODate("2014-02-03T09:05:00Z") }
{ "_id" : 4, "item" : "abc", "price" : 10, "quantity" : 10, "date" : ISODate("2014-02-15T08:00:00Z") }
{ "_id" : 5, "item" : "xyz", "price" : 5, "quantity" : 10, "date" : ISODate("2014-02-15T09:05:00Z") }

Mengelompokkan dokumen berdasarkan hari dan tahun bidang

db.sales.aggregate(
   [
     {
       $group:
         {
           _id: { day: { $dayOfYear: "$date"}, year: { $year: "$date" } },
           totalAmount: { $sum: { $multiply: [ "$price", "$quantity" ] } },
           count: { $sum: 1 }
         }
     }
   ]
)
5, operasi berikut menggunakan akumulator
{ $sum: <expression> }
2 untuk menghitung jumlah total dan hitungan untuk setiap kelompok dokumen

db.sales.aggregate(
   [
     {
       $group:
         {
           _id: { day: { $dayOfYear: "$date"}, year: { $year: "$date" } },
           totalAmount: { $sum: { $multiply: [ "$price", "$quantity" ] } },
           count: { $sum: 1 }
         }
     }
   ]
)

Operasi mengembalikan hasil berikut

{ "_id" : { "day" : 46, "year" : 2014 }, "totalAmount" : 150, "count" : 2 }
{ "_id" : { "day" : 34, "year" : 2014 }, "totalAmount" : 45, "count" : 2 }
{ "_id" : { "day" : 1, "year" : 2014 }, "totalAmount" : 20, "count" : 1 }

Menggunakan

{ $sum: <expression> }
_2 pada bidang yang tidak ada mengembalikan nilai
{ $sum: [ <expression1>, <expression2> ... ]  }
6. Operasi berikut mencoba untuk
{ $sum: <expression> }
_2 pada
{ "_id" : { "day" : 46, "year" : 2014 }, "totalAmount" : 150, "count" : 2 }
{ "_id" : { "day" : 34, "year" : 2014 }, "totalAmount" : 45, "count" : 2 }
{ "_id" : { "day" : 1, "year" : 2014 }, "totalAmount" : 20, "count" : 1 }
0

db.sales.aggregate(
   [
     {
       $group:
         {
           _id: { day: { $dayOfYear: "$date"}, year: { $year: "$date" } },
           totalAmount: { $sum: "$qty" },
           count: { $sum: 1 }
         }
     }
   ]
)

Operasi kembali

{ "_id" : { "day" : 46, "year" : 2014 }, "totalAmount" : 0, "count" : 2 }
{ "_id" : { "day" : 34, "year" : 2014 }, "totalAmount" : 0, "count" : 2 }
{ "_id" : { "day" : 1, "year" : 2014 }, "totalAmount" : 0, "count" : 1 }

Gunakan di Tahap { $sum: <expression> } _5

Koleksi

{ "_id" : { "day" : 46, "year" : 2014 }, "totalAmount" : 150, "count" : 2 }
{ "_id" : { "day" : 34, "year" : 2014 }, "totalAmount" : 45, "count" : 2 }
{ "_id" : { "day" : 1, "year" : 2014 }, "totalAmount" : 20, "count" : 1 }
_2 berisi dokumen-dokumen berikut

{ "_id": 1, "quizzes": [ 10, 6, 7 ], "labs": [ 5, 8 ], "final": 80, "midterm": 75 }
{ "_id": 2, "quizzes": [ 9, 10 ], "labs": [ 8, 8 ], "final": 95, "midterm": 80 }
{ "_id": 3, "quizzes": [ 4, 5, 5 ], "labs": [ 6, 5 ], "final": 78, "midterm": 70 }

Contoh berikut menggunakan

{ $sum: <expression> }
_2 pada tahap untuk menghitung total skor kuis, total skor lab, dan total nilai ujian akhir dan tengah semester

db.students.aggregate([
   {
     $project: {
       quizTotal: { $sum: "$quizzes"},
       labTotal: { $sum: "$labs" },
       examTotal: { $sum: [ "$final", "$midterm" ] }
     }
   }
])

Operasi menghasilkan dokumen-dokumen berikut

{ $sum: <expression> }
_0

Di panggung

  • Dengan ekspresi tunggal sebagai operannya, jika ekspresi tersebut memutuskan ke sebuah array,
    { $sum: <expression> }
    
    2 melintasi ke dalam array untuk beroperasi pada elemen numerik dari array untuk mengembalikan nilai tunggal
  • Dengan daftar ekspresi sebagai operannya, jika salah satu ekspresi memutuskan ke array,
    { $sum: <expression> }
    
    2 tidak melintasi ke dalam array tetapi sebaliknya memperlakukan array sebagai nilai non-numerik

←   Operator Akumulator Grup $avg (agregasi)  →

© MongoDB, Inc 2008-sekarang. MongoDB, Mongo, dan logo daun adalah merek dagang terdaftar dari MongoDB, Inc

Bagaimana cara menjumlahkan semua bidang di MongoDB?

Untuk mendapatkan jumlah nilai kunci di semua dokumen dalam koleksi MongoDB, Anda dapat menggunakan agregat() .

Bagaimana cara menambahkan nilai dalam array di MongoDB?

Jika nilainya adalah array, $push menambahkan seluruh array sebagai elemen tunggal . Untuk menambahkan setiap elemen dari nilai secara terpisah, gunakan pengubah $each dengan $push. Sebagai contoh, lihat Menambahkan Nilai ke Array dalam Banyak Dokumen. Untuk daftar pengubah yang tersedia untuk $push , lihat Pengubah.

Apa itu $sum 1 di MongoDB?

1 Jawaban. Di MongoDB, $sum akan menjumlahkan nilai ekspresi untuk setiap baris dan dalam kasus Anda, Anda memiliki 3 baris sehingga akan menjadi 1 .

Apa yang dilakukan $sum di MongoDB?

Ini berarti $sum mengembalikan jumlah nilai kuantitas untuk dokumen antara awal partisi dan dokumen saat ini .