sql >> Databáze >  >> NoSQL >> MongoDB

Vícenásobné počty s jedním dotazem v mongodb

Můžete to zkusit níže $facet agregace

$count agregace vám vždy poskytne počty pouze pro jednu shodu ($match ) stav. Takže musíte každý počet dále rozdělit do více sekcí a to je to, co $facet poskytuje procesy více agregačních kanálů v rámci jedné fáze na stejné sadě vstupních dokumentů.

db.collection.aggregate([
  { "$facet": {
    "Total": [
      { "$match" : { "ReleaseDate": { "$exists": true }}},
      { "$count": "Total" },
    ],
    "Released": [
      { "$match" : {"ReleaseDate": { "$exists": true, "$nin": [""] }}},
      { "$count": "Released" }
    ],
    "Unreleased": [
      { "$match" : {"ReleaseDate": { "$exists": true, "$in": [""] }}},
      { "$count": "Unreleased" }
    ]
  }},
  { "$project": {
    "Total": { "$arrayElemAt": ["$Total.Total", 0] },
    "Released": { "$arrayElemAt": ["$Released.Released", 0] },
    "Unreleased": { "$arrayElemAt": ["$Unreleased.Unreleased", 0] }
  }}
])

Výstup

[{
    "Total": 3,
    "Released": 2,
    "Unreleased": 1
}]


  1. Redis:Součet SKÓRE v tříděné sadě

  2. Laravel ID všech relací s ovladačem Redis

  3. Jak aktualizovat hodnoty pomocí pymongo?

  4. Jak vypsat všechny databáze MongoDB v Node.js?