MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Retour asymétrique de données MongoDB, premier élément du tableau renvoyé en entier, le reste avec certaines propriétés omises ?

Si votre tableau de sous-documents que vous souhaitez omettre n'est pas très grand. Je voudrais juste le supprimer du côté de l'application. Faire du traitement dans MongoDB signifie que vous choisissez d'utiliser les ressources de calcul de MongoDB au lieu de votre application. En règle générale, votre application est plus facile et moins chère à mettre à l'échelle, il est donc préférable de l'implémenter au niveau de la couche d'application.

Mais dans ce cas précis, il n'est pas trop complexe de l'implémenter dans 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