sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB asymmetrisk retur av data, första objektet i array returneras i sin helhet, resten med vissa egenskaper utelämnade?

Om din underdokumentarray du vill utelämna inte är särskilt stor. Jag skulle bara ta bort den på applikationssidan. Att göra bearbetning i MongoDB innebär att du väljer att använda MongoDBs beräkningsresurser istället för din applikation. Generellt är din applikation enklare och billigare att skala, så implementering i applikationslagret är att föredra.

Men i exakt det här fallet är det inte alltför komplicerat att implementera det i MongoDB:

db.collection.aggregate([
  {
    $addFields: { // keep the first element somewhere
      first: { $arrayElemAt: [ "$mainArray", 0] }
    }
  },
  {
    $project: { // remove the subdocument field
      "mainArray.array": false
    }
  },
  {
    $addFields: { // join the first element with the rest of the transformed array
      mainArray: {
        $concatArrays: [
          [ // first element
            "$first"
          ],
          { // select elements from the transformed array except the first
            $slice: ["$mainArray", 1, { $size: "$mainArray" }]
          }
        ]
      }
    }
  },
  {
    $project: { // remove the temporary first elemnt
      "first": false
    }
  }
])

MongoDB Playground




  1. Vad är JavaScript-motorn som kör mongoDB-skalet?

  2. Mongoose:Schema vs Model?

  3. Bindande dynamiskt serversvar (kapslade json)

  4. MongoDB - undkomma citattecken medan posten infogas