Partage
  • Partager sur Facebook
  • Partager sur Twitter

Mongodb question requetage de documents

    14 mai 2020 à 19:08:17

    Bonjour !

    Je suis actuellement en train de découvrir mongodb, et je ne suis pas du tout à l'aise, ayant essentiellement travaillé avec des SGBDR.

    Donc je suis en train de découvrir le requetage, en passant par un fichier js, du document suivant :

    article1={
        artTitre: "NoSQL",
        artCorps: "NoSQL : l'avenir des BD",
        datePub: new Date("2019-07-15"),
        auteur:[
            { nom:"Laura", adresse:"Paris" },
            { nom:"Jules", adresse:"Marseille" }
        ],
        commentaire:[
            { comTexte:"Bonne nouvelle: STOP SQL!", nom:"Pierre"},
            { comTexte:"Désolé, mais vous n'avez rien compris.", nom:"Laura"}
        ]

    Je n'ai aucun problème pour récupérer le titre, l'artCorps, la date, mais les choses se compliquent quand je veux aller plus en profondeur. par exemple, pour récupérer uniquement le comTexte de Pierre, est ce que cela est possible directement dans la requête, sans passer par des foreach, et du traitement de code? Ou est ce que la structure de mon document n'est pas bonne? J'ai suivi le cours, mais il ne m'a pas permis de comprendre comment faire dans mon cas...

    Merci de vos réponses

    -
    Edité par Bourrichon 14 mai 2020 à 19:08:34

    • Partager sur Facebook
    • Partager sur Twitter
      14 mai 2020 à 20:35:26

      Bonjour,

      Peux-tu nous montrer ce que tu as essayé, et aussi nous décrire ce que tu souhaiterais obtenir comme résultat ?

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        16 mai 2020 à 18:57:46

        Salut,

        Oui c'est possible visiblement :

        https://docs.mongodb.com/manual/tutorial/project-fields-from-query-results/

        Dans ton cas ça donnerait un truc qui ressemble à ça (je n'ai pas testé) :

        db.inventory.find(
           { artTitre: "NoSQL" },
           { "commentaire.comTexte": 1 }
        )



        • Partager sur Facebook
        • Partager sur Twitter
          17 mai 2020 à 10:22:41

          Bonjour !

          Désolé de ma réponse un peu tardive.

          Alors, ce que je cherche à faire, tout simplement.

          J'ai 2 fichiers JS, insererDoc.js et rechercherDoc.js. Les 2 fichiers sont éxacutés avec l'interpréteur de commande windows.

          Ce que je cherche à faire, c'est d’exécuter des requêtes d’interrogation d'une collection d'article, qui se présente sous cette forme :

          var article1={
              artTitre: "NoSQL",
              artCorps: "NoSQL : l'avenir des BD",
              datePub: new Date("2019-07-15"),
              auteur:[
                  { nom:"Laura", adresse:"Ajaccio" },
                  { nom:"Jules", adresse:"Corte" }
              ],
              commentaire:[
                  { comTexte:"Bonne nouvelle: STOP SQL!", nom:"Pierre"},
                  { comTexte:"Désolé, mais vous n'avez rien compris.", nom:"Laura"}
              ]
          }
          
          var article2={
              artTitre: "SGBDNoSQL",
              artCorps: "SGBD NoSQL: lequel choisir?",
              datePub: new Date("2020-04-22"),
              auteur:[
                  { nom:"Marie", adresse:"Bastia" }
              ],
              commentaire:[
                 ]
          }
          
          var article3={
              artTitre: "MongoDB",
              artCorps: "MongoDB : un SGBD pour le big data",
              datePub: new Date("2019-02-18"),
              auteur:[
                  { nom:"Pierre", adresse:"Ajaccio" },
                  { nom:"Laura", adresse:"Ajaccio" }
                  
              ],
              commentaire:[
                  { comTexte:"Grace à MongoDB, tout devient simple", nom:"Pierre"},
              ]
          }


          L'une des requêtes à exécuter par exemple, c'est afficher l'adresse de Laura.

          Pour l'instant j'ai essayé ca :

          var art=db.article.find({"auteur.nom": "Laura"}, {_id:0, "auteur.adresse":1});
          art.forEach(
              function(affiche){
                  printjson(affiche);
              }
          );

           Mais ca me renvoi :

          {
                  "auteur" : [
                          {
                                  "adresse" : "Ajaccio"
                          },
                          {
                                  "adresse" : "Corte"
                          }
                  ]
          }
          {
                  "auteur" : [
                          {
                                  "adresse" : "Ajaccio"
                          },
                          {
                                  "adresse" : "Ajaccio"
                          }
                  ]
          }
          

          -
          Edité par Bourrichon 17 mai 2020 à 10:23:00

          • Partager sur Facebook
          • Partager sur Twitter
            17 mai 2020 à 13:51:58

            Une requête retourne un ou des documents de la collection. Si tu spécifies un champ auteur.adresse il ne retournera que ce champ dans le document, mais en gardant la structure du document tel que tu l'as créé dans ta collection.

            Si tu veux récupérer le champ adresse du résultat il faut effectivement coder pour y accéder. Quelque chose comme affiche[0].auteur.adresse

            • Partager sur Facebook
            • Partager sur Twitter
              28 mai 2020 à 19:12:02

              Re ! Désolé pour ma réponse tardive, encore une fois ...

              affiche[0].auteur.adresse ne marche pas, affiche[0] is undefined.

              Je ne comprend pas comment cela doit fonctionner.

              EDIT:

              Ok, finalement avec vos remarques j'ai pu arriver à une solution :

              var art=db.article.find({"auteur.nom": "Laura"}, {_id:0, "auteur.adresse":1, "auteur.nom":1});
              var i = 0;
              art.forEach(
                  function(affiche){
                      if(affiche['auteur'][i]['nom'] == "Laura"){
                          print(affiche['auteur'][i]['adresse']);
                      } 
                      else{
                          i++;
                      }           
                  }
              );
              Merci !

              -
              Edité par Bourrichon 29 mai 2020 à 18:35:58

              • Partager sur Facebook
              • Partager sur Twitter

              Mongodb question requetage de documents

              × 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