MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB asymmetrische Rückgabe von Daten, erstes Element im Array vollständig zurückgegeben, der Rest mit bestimmten Eigenschaften weggelassen?

Wenn Ihr Filialdokumentarray, das Sie auslassen möchten, nicht sehr groß ist. Ich würde es einfach auf der Anwendungsseite entfernen. Die Verarbeitung in MongoDB bedeutet, dass Sie sich dafür entscheiden, die Rechenressourcen von MongoDB anstelle Ihrer Anwendung zu verwenden. Im Allgemeinen ist Ihre Anwendung einfacher und kostengünstiger zu skalieren, daher ist die Implementierung auf der Anwendungsebene vorzuziehen.

Aber in genau diesem Fall ist es nicht zu komplex, es in MongoDB zu implementieren:

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