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

MongoDb Existuje na sloupec

Mám agregaci pomocí $facet; to umožňuje provádět dotazy paralelně pro každý průchod dokumentu. Dotazujeme se a spočítáme Cost a Status jako dva aspekty stejného dotazu.

db.test.aggregate( [
  {
      $match: { fld1: "Data" }
  },
  { 
      $facet: {
          cost: [
              { $match: { cost: { $exists: true } } },
              { $count: "count" }
          ],
          status: [
              { $match: { status: { $exists: true } } },
              { $count: "count" }
          ],
      }
  },
  { 
      $project: { 
          costCount: { $arrayElemAt: [ "$cost.count" , 0 ] },
          statusCount: { $arrayElemAt: [ "$status.count" , 0 ] }
      } 
  }
] )

Dostávám výsledek { "costCount" : 4, "statusCount" : 3 } pomocí následujících dokumentů:

{ _id: 1, fld1: "Data", cost: 12, status: "Y" },
{ _id: 2, fld1: "Data", status: "N" },
{ _id: 3, fld1: "Data" },
{ _id: 4, fld1: "Data", cost: 90 },
{ _id: 5, fld1: "Data", cost: 44 },
{ _id: 6, fld1: "Data", cost: 235, status: "N" },
{ _id: 9, fld1: "Stuff", cost: 0, status: "Y" }


POZNÁMKA :Zde je podobný dotaz s použitím faset:MongoDB Vlastní řazení ve dvou polích .




  1. Dotaz na pole ve vloženém seznamu

  2. Nejúčinnější způsob, jak získat několik hashů v Redis?

  3. MongoDB MapReduce:Nefunguje podle očekávání pro více než 1000 záznamů

  4. Správný způsob, jak přidat pole do kolekce uživatelů v meteoru