sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB:Hvordan tæller man et felt, hvis dets værdi matcher en betingelse?

Brug følgende aggregeringspipeline:

db.click_log.aggregate([
    { "$match" : { "log.type" : { "$ne" : "emailed" } } }, // get rid of docs with an "emailed" value in log.type and docs not from this month
    { "$unwind" : "$log" }, // unwind to get log elements as separate docs
    { "$project" : { "_id" : 1, "log" : 1, "month" : { "$month" : "$log.utc_timestamp" } } },
    { "$match" : { "log" : "clicked", "month" : <# of month> } }, // get rid of log elements not from this month and that aren't type clicked
    { "$group" : { "_id" : "$_id", "count" : { "$sum" : 1 } } } // collect clicked elements from same original doc and count number
])

Dette vil returnere, for hvert dokument, der ikke har "mailet" som værdien log.type , antallet af elementer i arrayet log der har log.type værdi clicked og med tidsstempel fra den aktuelle måned. Hvis du ønsker en glidende 30-dages periode for måned, skal du ændre $match at være en intervalforespørgsel med $gt og $lt dækker det ønskede tidsrum.



  1. Hvordan udføres fuldtekst søgekommando i MongoDB med Java Driver?

  2. Inside Santander's Near Real-Time Data Ingest Architecture (del 2)

  3. MongoDB:Forespørgsel har implicit grænse(256)?

  4. Inde i Apache HBases nye support til MOB'er