Partage
  • Partager sur Facebook
  • Partager sur Twitter

Formatage des réponses sur MongoDB

    12 février 2021 à 10:33:16

    Bonjour,

    Je suis en train de développer un programme utilisant MongoDB. Lorsque je fais une requête sur toute la base pour n’extraire que certains champs (contenus dans un tableau Array), ces derniers remontent bien mais les autres champs apparaissent vides dans la réponse. Je m'explique :

    • Exemple simplifié d'un document :
    {
      "file_name": "Running_2013-03-31T19_31_49",
      "data": [
        {
          "type": "activity",
          "product_name": "Suunto Ambit",
          "time_created": "2013-03-31 19:08:56"
        },
        {
          "type": "record",
          "heart_rate": 94,
          "position_lat": 47.35368099063635,
          "position_long": 0.8127570245414972,
          "timestamp": "2013-03-31 17:31:49"
        },
        {
          "type": "record",
          "heart_rate": 94,
          "position_lat": 47.353697000071406,
          "position_long": 0.8127430267632008,
          "timestamp": "2013-03-31 17:31:50"
        },
        {
          "type": "session",
          "avg_heart_rate": 169,
          "description": "Course.",
          "event": "session",
          "event_type": "stop",
          "max_heart_rate": 182,
          "min_heart_rate": 93,
          "sport": "running",
          "start_time": "2013-03-31 17:31:49",
          "time_in_hr_zone": [
            13.0,
            27.0,
            65.0,
            4145.0,
            1579.0
          ],
          "timestamp": "2013-03-31 19:08:56",
          "total_ascent": 81,
          "total_calories": 1454,
          "total_descent": 62,
          "total_distance": 18380.0,
          "total_elapsed_time": 5827.93,
          "total_training_effect": 5.0
        }
      ],
      "hrv": [
        0.121,
        0.626,
        0.62,
        0.628,
        0.336
      ]
    }

    Dans la version réelle, il peut y avoir plusieurs dizaines de milliers de champs "type":"record" dans un document. Tous étant contenus dans le tableau (Array) "data".

    • Requête pour extraire certaines données :

    Pour le besoin de mon programme, je ne veux extraire que certaines variables : time_created, avg_heart_rate et sport.

    J'ai donc fais la requête :

    db.fit_json.find({}, {"_id": 0, "data.time_created": 1, "data.sport": 1, "data.avg_heart_rate": 1})
    

    Et j'ai la sortie suivante (pour une base simplifiée avec seulement 2 documents) :

    { "data" : [ { "time_created" : "2013-03-31 19:08:56" }, {  }, {  }, { "avg_heart_rate" : 169, "sport" : "running" } ] }
    { "data" : [ { "time_created" : "2013-03-13 12:00:00" }, {  }, {  }, { "avg_heart_rate" : 70, "sport" : "running" } ] }

    Alors que j'aurais voulu :

    { { "time_created" : "2013-03-31 19:08:56" }, { "avg_heart_rate" : 169}, { "sport" : "running" } }
    { { "time_created" : "2013-03-13 12:00:00" }, { "avg_heart_rate" : 70}, {"sport" : "running" } }

    Càd avoir un objet par document contenant un sous-objet pour chaque variable demandée.

    J'ai testé beaucoup de commande différentes et impossible de trouver.

    Avez-vous des idées ?

    Merci d'avance.

    rmarion37.



    "data" : [ { "time_created" : "2013-03-13 12:00:00" }, {  }, {  }, { "avg_heart_rate" : 70, "sport" : "running" } ] }

    • Partager sur Facebook
    • Partager sur Twitter
      15 février 2021 à 13:44:11

      Pas d'idée ?

      J'ai essayé avec :

      db.getCollection('fit_json').aggregate({$match:{"data.avg_heart_rate": { $exists : true}}},
                                             {$project: {"_id": 0,
                                                         "data.time_created": 1,
                                                         "data.avg_heart_rate": 1}})
                                  .pretty()

      et j'ai la même réponse :

      /* 1 */
      {
          "data" : [ 
              {
                  "time_created" : "2013-03-31 19:08:56"
              }, 
              {}, 
              {}, 
              {
                  "avg_heart_rate" : 169
              }
          ]
      }
      
      /* 2 */
      {
          "data" : [ 
              {
                  "time_created" : "2013-03-13 12:00:00"
              }, 
              {}, 
              {}, 
              {
                  "avg_heart_rate" : 70
              }
          ]
      }




      • Partager sur Facebook
      • Partager sur Twitter

      Formatage des réponses sur MongoDB

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown