sql >> Database >  >> NoSQL >> MongoDB

MongoDB-invulgegevens die niet zijn opgenomen in het queryresultaat

Het is mogelijk via $range om een ​​bereik te genereren en zelf op te zoeken

stappen

  1. $group - vind min en max datum dynamisch, hardcode indien nodig
  2. $project - genereer $range , gebaseerd op min &max, hardcode indien nodig
  3. $unwind - ontspan bereik om te documenteren
  4. $project - datum genereren op gegenereerd nummer
  5. $lookup - doe zelf mee met verzameling op basis van datum
  6. $project - als match gevonden retour telling, anders dan 0. verander $ifNull naar $cond als de mongo-versie kleiner is dan 3,6

geaggregeerde pijplijn

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

collectie

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

aggregatieresultaat

{ "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. Vind je wat waarden in een mongodb-verzameling?

  2. Wat is de beste strategie om Redis-gegevens te synchroniseren met MySQL?

  3. Retourneert mangoest findOne op model een belofte?

  4. Mongoose-validatie:vereist:false, valideren:regex, problemen met lege waarden