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

Projekt pole objektů na klíčovou hodnotu

Ano, pomocí $arrayToObject a $map převést existující pole do formátu, který přijímá:

db.collection.aggregate([
  { "$replaceRoot": {
    "newRoot": {
      "$arrayToObject": {
        "$concatArrays": [
          [{ "k": "date", "v": "$_id.date" }],  
          { "$map": {
            "input": "$aggr",
            "in": { "k": "$$this.gender", "v": "$$this.count" }
          }}
        ]
      }
    }    
  }}
])

Samozřejmě, pokud je to ve skutečnosti pouze na „chvostě“ existující agregace a nemáte alespoň MongoDB 3.4.4, kde je operátor zaveden, můžete výsledek jednoduše přetvořit v kódu klienta:

db.collection.aggregate([
  // existing pipeline
]).map(d => 
  Object.assign(
    { date: d._id.date },
    d.aggr.reduce((acc,curr) =>
      Object.assign(acc,{ [curr.gender]: curr.count }),{}
    )
  )
)



  1. mongodb spojovací dotaz se dvěma kolekcemi a klauzulí where

  2. Vytvoření celého modelu pouze pro čtení pomocí Mongoid

  3. mongodb se nespouští na ubuntu 18.04

  4. Jak získám _id nedávno vloženého dokumentu po vložení pomocí mongo csharp?