MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Jumlah pengembalian agregat MongoDB 0 jika tidak ada hasil

Jika saya benar memahami apa yang Anda inginkan, Anda dapat mencoba ini:

db.builds.aggregate([
    { $project: 
        { 
            time: 1,
            projectedData: { $ifNull: ['$data.buildResult', 'none'] } 
        } 
    },

    { $group: { 
        _id: { 
            month: { $month: "$time" },
            day: { $dayOfMonth: "$time" },
            year: { $year: "$time" }, 
            buildResult: "$projectedData"
        },
        count: { $sum: { $cond: [ { $eq: [ "$projectedData", "none" ] }, 0, 1 ] } }
    } },

    { $sort: { "_id.year": 1, "_id.month": 1, "_id.day": 1 } }
])

Pembaruan:
Anda ingin mendapatkan dari output lebih banyak dokumen yang telah di input, itu hanya mungkin dengan unwind operator yang bekerja dengan array, tetapi Anda tidak memiliki array, jadi seperti yang saya tahu tidak mungkin untuk mendapatkan lebih banyak dokumen dalam kasus Anda. Jadi, Anda harus menambahkan beberapa logika setelah hasil kueri untuk membuat data baru untuk tanggal yang ada dengan 0 hitungan untuk jenis buildResult lainnya...




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tidak dapat terhubung ke database MongoDB 2.0.5 dengan pymongo 2.2

  2. Tidak dapat merusak properti `pengguna` dari 'tidak terdefinisi' atau 'null'

  3. Menghapus objek dari array di dalam Koleksi

  4. Bagaimana menghindari kesenjangan waktu saat menggabungkan OHLC di mongoDB

  5. mongodb:Struktur pengindeksan multikey?