sql >> Database >  >> NoSQL >> MongoDB

Projectarray van objecten naar sleutelwaarde

Ja, met behulp van $arrayToObject en $map om de bestaande array te converteren naar een formaat dat het accepteert:

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

Natuurlijk, als dit eigenlijk alleen op de "staart" van een bestaande aggregatie staat en je hebt niet ten minste MongoDB 3.4.4 waar de operator wordt geïntroduceerd, dan kun je het resultaat natuurlijk eenvoudig opnieuw vormgeven in de clientcode:

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. Een enkel object verwijderen uit een array van objecten in MongoDB

  2. Sailsjs - Aangepast loggen met Winston

  3. MongoError:deze MongoDB-implementatie biedt geen ondersteuning voor herschrijfbare schrijfbewerkingen. Voeg retryWrites=false toe aan uw verbindingsreeks

  4. Fout:Kon geen verbinding maken met servers in uw MongoDB Atlas-cluster