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

Dane do wypełnienia MongoDB, które nie są uwzględnione w wyniku zapytania

Jest to możliwe poprzez $range do wygenerowania zakresu i samodzielnego wyszukania

kroki

  1. $group - znajdź minimalną i maksymalną datę dynamicznie, w razie potrzeby zapisz kod na stałe
  2. $project - wygeneruj $range , w oparciu o min i max, w razie potrzeby kod sprzętowy
  3. $unwind - rozwiń zakres, aby udokumentować
  4. $project - generuj datę według wygenerowanego numeru
  5. $lookup - samodzielne połączenie z odbiorem na podstawie daty
  6. $project - jeśli dopasowanie znalazło liczbę zwrotów, w przeciwnym razie 0. zmień $ifNull do $cond jeśli wersja mongo jest mniejsza niż 3.6

zagregowany potok

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 ] } }
        }
    ]
)

kolekcja

> 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 }
> 

wynik agregacji

{ "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. Wiele prób instancji serwera podczas działania jest

  2. używa czasu utworzenia mongodb ObjectId

  3. jak dodać nowe pola do schematu solr

  4. Jak zrobić upsert z MongoDB 2.0?

  5. Jak uzyskać tablicę obiektów json zamiast dokumentów mongoose?