sql >> Database teknologi >  >> NoSQL >> MongoDB

Projektarrangement af objekter til nøgleværdi

Ja, ved at bruge $arrayToObject og $map for at konvertere det eksisterende array til et format, det accepterer:

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

Selvfølgelig, hvis dette faktisk kun er på "halen" af en eksisterende aggregering, og du ikke har mindst MongoDB 3.4.4, hvor operatøren er introduceret, så kan du blot omforme resultatet i klientkoden:

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. Mongoose find alle dokumenter, hvor array.length er større end 0 og sorter dataene

  2. Hvordan implementerer jeg denne mongodb-forespørgsel og opdateringsoperation (CSharp-driver)?

  3. Hvordan kan jeg tilføje billeder i mongoDB?

  4. Sådan massesletter du hundredtusindvis af nøgler med specialtegn i Redis