sql >> Database >  >> NoSQL >> MongoDB

MongoDB:Hoe een veld tellen als de waarde overeenkomt met een voorwaarde?

Gebruik de volgende aggregatiepijplijn:

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

Dit wordt geretourneerd, voor elk document dat niet is "gemaild" als een waarde van log.type , het aantal elementen van de array log die log.type . hebben waarde clicked en met tijdstempel van de huidige maand. Als u een glijdende periode van 30 dagen voor de maand wilt, wijzigt u de $match om een ​​bereikquery te zijn met $gt en $lt voor de gewenste periode.



  1. Mongoose-query waarbij de waarde niet null is

  2. Implementatie en onderhoud van MongoDB met behulp van Ansible

  3. Hoe Redis implementeren in CodeIgniter?

  4. MongoDB-updategegevens in genest veld