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

Data pengisian MongoDB yang tidak termasuk dalam hasil kueri

Bisa melalui $range untuk menghasilkan rentang dan melakukan pencarian sendiri

langkah

  1. $group - temukan tanggal min dan maks secara dinamis, hard-code jika diperlukan
  2. $project - menghasilkan $range , berdasarkan min &max, hard-code jika diperlukan
  3. $unwind - melepas rentang untuk mendokumentasikan
  4. $project - menghasilkan tanggal dengan nomor yang dihasilkan
  5. $lookup - gabung sendiri dengan koleksi berdasarkan tanggal
  6. $project - jika kecocokan ditemukan jumlah pengembalian, jika tidak maka 0. ubah $ifNull ke $cond jika versi mongo kurang dari 3.6

pipa agregat

db.t.aggregate(
    [   
        {
            $group : { _id : null, startDate : { "$min" : "$date" }, endDate : { "$max" : "$date" }} 
        },
        {
            $project : { _id : 0 , startDate : 1,  genNo : { $range : [ { $add : [ {"$dayOfMonth" : "$startDate"}, -1 ] }, { $add : [ {"$dayOfMonth" : "$endDate"} , 1 ] } ] } }
        },
        {
            $unwind : "$genNo"
        },
        {
            $project : { genDate : { $add : [ "$startDate", { $multiply : [ "$genNo" , 86400000 ] } ] } }
        },
        {
            $lookup : {
                from : "t",
                localField : "genDate",
                foreignField : "date",
                as : "out"
            }
        },
        {
            $project : { date : "$genDate", count : { $ifNull : [ { $arrayElemAt : ["$out.count", 0 ] }, 0 ] } }
        }
    ]
)

koleksi

> db.t.find()
{ "_id" : ObjectId("5a5d78d5423b9839ce07bd77"), "date" : ISODate("2018-01-01T00:00:00Z"), "count" : 3 }
{ "_id" : ObjectId("5a5d78d5423b9839ce07bd78"), "date" : ISODate("2018-01-04T00:00:00Z"), "count" : 5 }
> 

hasil agregasi

{ "date" : ISODate("2018-01-01T00:00:00Z"), "count" : 3 }
{ "date" : ISODate("2018-01-02T00:00:00Z"), "count" : 0 }
{ "date" : ISODate("2018-01-03T00:00:00Z"), "count" : 0 }
{ "date" : ISODate("2018-01-04T00:00:00Z"), "count" : 5 }
{ "date" : ISODate("2018-01-05T00:00:00Z"), "count" : 0 }
> 



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Haruskah saya menggunakan opsi allowDiskUse di lingkungan produk?

  2. Filter Luwak berdasarkan Kunci Tanggal Dinamis dengan nilai

  3. Migrasi ke MongoDB:cara menanyakan GROUP BY + WHERE

  4. Perbarui beberapa elemen dengan nilai berbeda di Mongoose

  5. Indeks parsial di mongodb / luwak