{"id":501,"date":"2024-06-17T10:31:42","date_gmt":"2024-06-17T08:31:42","guid":{"rendered":"https:\/\/spgoo.org\/?page_id=501"},"modified":"2025-12-22T14:33:32","modified_gmt":"2025-12-22T13:33:32","slug":"bdd-mongodb","status":"publish","type":"page","link":"https:\/\/spgoo.org\/?page_id=501","title":{"rendered":"BDD &#8211; Mongodb"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Solution <span class='tooltipsall tooltipsincontent classtoolTips3'>MongoDB<\/span> : NoSQL <\/h2>\n\n\n\n<p>Langage : javascript     Type: Document <\/p>\n\n\n\n<p>Description du mod\u00e8le de document utilis\u00e9 dans les diff\u00e9rents projets <\/p>\n\n\n\n<p>DeepBDD : est une plateforme Dictionnaire  d\u00e9di\u00e9e \u00e0 l&#8217;anglais contemporain. Elle regroupe les dictionnaires Anglais, Am\u00e9ricain et Australien pour offrir aux chercheurs des fonctionnalit\u00e9s de manipulation et d&#8217;extraction ainsi que des fonctionnalit\u00e9s d&#8217;enrichissement de ce gisement de donn\u00e9es. <\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>Mod\u00e8le XML<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    &lt;Entry&gt;\n            &lt;Head&gt;\n                    &lt;HWD&gt;Aarhus&lt;\/HWD&gt;\n            &lt;\/Head&gt;\n            &lt;PronCodes&gt;\n                    &lt;PRON&gt;\u02c8\u0254\u02d0 hu\u02d0s&lt;\/PRON&gt;\n                    &lt;VARPRON&gt;\u02c8\u0251\u02d0-, -h\u028as&lt;\/VARPRON&gt;\n                    &lt;AMEPRON&gt;\u02c8\u0254\u02d0r-&lt;\/AMEPRON&gt;\n                    &lt;AMEVARPRON&gt;\u02c8\u0251\u02d0r-&lt;\/AMEVARPRON&gt;\n            &lt;\/PronCodes&gt;\n            &lt;DESC&gt;\u2014Danish&lt;\/DESC&gt;\n            &lt;WORD&gt;\u00c5rhus &lt;\/WORD&gt;\n            &lt;ForeignPron&gt;\n                    &lt;PronCodes&gt;\n                            &lt;PRON&gt;\u02c8\u0254\u02d0 hu\u02d0\u0294s&lt;\/PRON&gt;\n                    &lt;\/PronCodes&gt;\n            &lt;\/ForeignPron&gt;\n    &lt;\/Entry&gt;<\/code><\/pre>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>Mod\u00e8le JSON &#8211; <span class='tooltipsall tooltipsincontent classtoolTips3'>MongoDB<\/span><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">{<br>    \"_id\" : ObjectId(\"6626177d4c56c07afaa398ff\"),<br>    \"Head\" : {<br>        \"HWD\" : \"Aarhus\",<br>        \"head_s\" : \"Aarhus\"<br>    },<br>    \"PronCodes_0\" : {<br>        \"PRON\" : \"\u02c8\u0254\u02d0 hu\u02d0s\",<br>        \"VARPRON\" : \"\u02c8\u0251\u02d0-, -h\u028as\",<br>        \"AMEPRON\" : \"\u02c8\u0254\u02d0r-\",<br>        \"AMEVARPRON\" : \"\u02c8\u0251\u02d0r-\"<br>    },<br>    \"DESC_0\" : \"\u2014Danish\",<br>    \"WORD0\" : \"\u00c5rhus \",<br>    \"ForeignPron\" : {<br>        \"PronCodes\" : {<br>            \"PRON\" : \"\u02c8\u0254\u02d0 hu\u02d0\u0294s\"<br>        },<br>        \"DESC\" : \"\",<br>        \"WORD\" : \"\u00c5rhus \"<br>    },<br>    \"ide_deepbdd\" : \"6a91f25c007d11efbfe2c96a2935a937\"<br>}  <\/pre>\n<\/div>\n<\/div>\n\n\n\n<p>Dans ce projet, les \u00e9l\u00e9ments provenant des fichiers XML sont structur\u00e9s de mani\u00e8res diff\u00e9rentes. De plus des adaptations ont \u00e9t\u00e9 prises pour conserver des informations associ\u00e9es \u00e0 l&#8217;\u00e9dition. Ces \u00e9l\u00e9ments rajout\u00e9s de type &lt;lpdfont&gt;, &lt;TEXT&gt; &#8230;.n&#8217;ont aucune utilit\u00e9 pour notre plateforme, et seront ainsi \u00e9limin\u00e9s par un pr\u00e9-traitement du fichier. Ce module de pr\u00e9traitement s&#8217;appuie en partie sur des biblioth\u00e8ques de manipulations de XML qui ont pr\u00e9sent\u00e9 des d\u00e9fauts d&#8217;interpr\u00e9tation des fichiers d&#8217;origine d\u00fb \u00e0 la structure m\u00eame des fichiers et \u00e0 l&#8217;usage de balise ne respectant pas les conventions XML. <\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<pre class=\"wp-block-code\"><code>    &lt;Entry&gt;\n            &lt;Head&gt;\n                    &lt;HWD&gt;Aberdeen&lt;\/HWD&gt;\n            &lt;\/Head&gt;\n            &lt;DESC&gt;place in Scotland&lt;\/DESC&gt;\n            &lt;PronCodes&gt;\n                    &lt;PRON&gt;\u02cc\u00e6b \u0259 \u02c8di\u02d0n&lt;\/PRON&gt;\n                    &lt;AMEPRON&gt;\n                            &lt;TEXT&gt;-&lt;\/TEXT&gt;\n                            &lt;sup&gt;\u0259&lt;\/sup&gt;\n                            &lt;TEXT&gt;r-&lt;\/TEXT&gt;\n                    &lt;\/AMEPRON&gt;\n            &lt;\/PronCodes&gt;\n            &lt;DESC&gt;\u2014but places in the US are&lt;\/DESC&gt;\n            &lt;PronCodes&gt;\n                    &lt;PRON&gt;\u02c8\u2022\u2022\u2022&lt;\/PRON&gt;\n            &lt;\/PronCodes&gt;\n            &lt;Derivative&gt;\n                    &lt;DERIV&gt;~shire&lt;\/DERIV&gt;\n                    &lt;PronCodes&gt;\n                            &lt;PRON&gt;\u0283\u0259&lt;\/PRON&gt;\n                            &lt;VARPRON&gt;\n                                    &lt;TEXT&gt;-\u0283\u026a\u0259, \u00a7-\u0283a&lt;\/TEXT&gt;\n                                    &lt;i&gt;\u026a&lt;\/i&gt;\n                                    &lt;TEXT&gt;\u203f\u0259&lt;\/TEXT&gt;\n                            &lt;\/VARPRON&gt;\n                            &lt;AMEPRON&gt;\u0283\u026ar&lt;\/AMEPRON&gt;\n                            &lt;AMEVARPRON&gt;\n                                    &lt;TEXT&gt;-\u0283&lt;\/TEXT&gt;\n                                    &lt;sup&gt;\u0259&lt;\/sup&gt;\n                                    &lt;TEXT&gt;r&lt;\/TEXT&gt;\n                            &lt;\/AMEVARPRON&gt;\n                    &lt;\/PronCodes&gt;\n            &lt;\/Derivative&gt;\n    &lt;\/Entry&gt;<\/code><\/pre>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<pre class=\"wp-block-preformatted\">{\n    \"_id\" : ObjectId(\"6626177d4c56c07afaa39904\"),\n    \"Head\" : {\n        \"HWD\" : \"Aberdeen\",\n        \"head_s\" : \"Aberdeen\"\n    },\n    \"DESC_0\" : \"place in Scotland\",\n    \"PronCodes_0\" : {\n        \"PRON\" : \"\u02cc\u00e6b \u0259 \u02c8di\u02d0n\",\n        \"AMEPRON\" : \"-[sup]\u0259[\/sup]r-\"\n    },\n    \"DESC_1\" : \"\u2014but places in the US are\",\n    \"PronCodes_1\" : {\n        \"PRON\" : \"\u02c8\u2022\u2022\u2022\",\n        \"AMEPRON\" : \"\u02c8\u2022\u2022\u2022\"\n    },\n    \"Derivative\" : [ \n        {\n            \"DERIV\" : \"~shire\",\n            \"PronCodes\" : {\n                \"PRON\" : \"\u0283\u0259\",\n                \"VARPRON\" : \"-\u0283\u026a\u0259, \u00a7-\u0283a[i]\u026a[\/i]\u203f\u0259\",\n                \"AMEPRON\" : \"\u0283\u026ar\",\n                \"AMEVARPRON\" : \"-\u0283[sup]\u0259[\/sup]r\"\n            }\n        }\n    ],\n    \"ide_deepbdd\" : \"6a938d9c007d11efbfe2c96a2935a937\"\n}\n<\/pre>\n<\/div>\n<\/div>\n\n\n\n<p class=\"has-pale-cyan-blue-color has-text-color has-link-color has-medium-font-size wp-elements-d01c42f22f5af85221e1c2f7ca08552a\">Utilisations avanc\u00e9es Bucket et facet :<\/p>\n\n\n\n<p><strong>Buckets<\/strong> : l&#8217;instruction bucket permet de faire des agr\u00e9gations rapides sur une collection pour connaitre rapidement la distribution selon une grandeur.La distribution peut \u00eatre fix\u00e9e ou d\u00e9finie de fa\u00e7on automatique avec bucketAuto. <\/p>\n\n\n\n<p>Deux illustrations  de cette m\u00e9thode sur les documents de la plateforme Emolgine. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>db.getCollection('D_G-5HT7').aggregate({$bucket:{groupBy:\"$minimizedAffinity\",boundaries:&#91;-14,-9,-8,-6],default:\"other\",output:{nb:{$sum:1}}}})<\/code><\/pre>\n\n\n\n<p>{ &#8220;_id&#8221; : -14, &#8220;nb&#8221; : <strong>56321<\/strong> }<br>{ &#8220;_id&#8221; : -9, &#8220;nb&#8221; : 45969 }<br>{ &#8220;_id&#8221; : -8, &#8220;nb&#8221; : 87741 }<br>{ &#8220;_id&#8221; : &#8220;other&#8221;, &#8220;nb&#8221; : 23 }<\/p>\n\n\n\n<p>Instruction \u00e9quivalente pour v\u00e9rifier l&#8217;intervalle et les valeurs : <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>db.getCollection('D_G-5HT7').find({$and:&#91;{\"minimizedAffinity\":{$gt:-14}},{\"minimizedAffinity\":{$lt:-9}}]}).count()  ==&gt;  <strong>56321<\/strong><\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>\ndb.getCollection('D_G-5HT7').aggregate({$bucketAuto:groupBy:\"$sascore\",buckets:5,granularity:\"R20\",output:{nb:{$sum:1}}}})<\/code><\/pre>\n\n\n\n<p>{ &#8220;_id&#8221; : { &#8220;min&#8221; : 0.9, &#8220;max&#8221; : 3.15 }, &#8220;nb&#8221; : 45375 }<br>{ &#8220;_id&#8221; : { &#8220;min&#8221; : 3.15, &#8220;max&#8221; : 4 }, &#8220;nb&#8221; : 59856 }<br>{ &#8220;_id&#8221; : { &#8220;min&#8221; : 4, &#8220;max&#8221; : 4.5 }, &#8220;nb&#8221; : 40294 }<br>{ &#8220;_id&#8221; : { &#8220;min&#8221; : 4.5, &#8220;max&#8221; : 5.6000000000000005 }, &#8220;nb&#8221; : 41634 }<br>{ &#8220;_id&#8221; : { &#8220;min&#8221; : 5.6000000000000005, &#8220;max&#8221; : 8 }, &#8220;nb&#8221; : 2895 }<\/p>\n\n\n\n<p><strong>Facets<\/strong>: <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>db.getCollection('D_G-5HT7').aggregate(&#91;{$facet:{\"efficiency\":&#91;{$bucketAuto:{groupBy:\"$minimizedAffinity\",buckets:4,output:{\"eff\":{$sum:1}}}}],\"affinity\":&#91;{$bucketAuto:{groupBy:\"$efficiency\",buckets:4}}]}}])<\/code><\/pre>\n\n\n\n<p>{ &#8220;efficiency&#8221; : [ { &#8220;_id&#8221; : { &#8220;min&#8221; : -14.78564, &#8220;max&#8221; : -9.21796 }, &#8220;eff&#8221; : 47514 }, { &#8220;_id&#8221; : { &#8220;min&#8221; : -9.21796, &#8220;max&#8221; : -8.14746 }, &#8220;eff&#8221; : 47515 }, { &#8220;_id&#8221; : { &#8220;min&#8221; : -8.14746, &#8220;max&#8221; : -7.17637 }, &#8220;eff&#8221; : 47514 }, { &#8220;_id&#8221; : { &#8220;min&#8221; : -7.17637, &#8220;max&#8221; : -6.00007 }, &#8220;eff&#8221; : 47511 } ], &#8220;affinity&#8221; : [ { &#8220;_id&#8221; : { &#8220;min&#8221; : -0.69, &#8220;max&#8221; : -0.43 }, &#8220;count&#8221; : 51772 }, { &#8220;_id&#8221; : { &#8220;min&#8221; : -0.43, &#8220;max&#8221; : -0.39 }, &#8220;count&#8221; : 47604 }, { &#8220;_id&#8221; : { &#8220;min&#8221; : -0.39, &#8220;max&#8221; : -0.35 }, &#8220;count&#8221; : 48887 }, { &#8220;_id&#8221; : { &#8220;min&#8221; : -0.35, &#8220;max&#8221; : -0.25 }, &#8220;count&#8221; : 41791 } ] }<\/p>\n\n\n\n<p class=\"has-pale-cyan-blue-color has-text-color has-link-color has-medium-font-size wp-elements-7bdd2baa314f87f9cc2954ec142f3486\">Description des requ\u00eates d&#8217;extraction dans les diff\u00e9rents projets <\/p>\n\n\n\n<p>Illustrations de requ\u00eates selon diff\u00e9rents sch\u00e9mas de donn\u00e9es (document) avec l&#8217;interpr\u00e9tation de fields de type tableau (links) dans la structure de document des mol\u00e9cules : <\/p>\n\n\n\n<p>Recherche des mol\u00e9cules ayant 6 liens vers la chimioth\u00e8que. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>db.getCollection('D_G-5HT7').aggregate(&#91;{$match:{\"links.Chimiotheque\":{$ne:null}}},{$project:{_id:\"$inchikey\",\"size\":{$size:\"$links.Chimiotheque\"}}},{$match:{\"size\":{$eq:6}}}])<\/code><\/pre>\n\n\n\n<p class=\"has-pale-cyan-blue-color has-text-color has-link-color has-medium-font-size wp-elements-0ff41ebc84df3d90b442069ce0b38b98\">Int\u00e9gration de ces requ\u00eates dans Spring Boot : <\/p>\n\n\n\n<p>Les requ\u00eates int\u00e9gr\u00e9es dans un web service sous Spring Boot. <\/p>\n\n\n\n<p>Constitution d&#8217;une requ\u00eate  pour extraire les \u00e9l\u00e9ments selon des crit\u00e8res compos\u00e9s par l&#8217;utilisateur. Dans le module d&#8217;exploitation des mol\u00e9cules, l&#8217;interface autorise l&#8217;utilisateur \u00e0 pr\u00e9ciser les intervalles de s\u00e9lection des mol\u00e9cules selon les diff\u00e9rentes grandeurs possibles: <\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"445\" height=\"539\" src=\"https:\/\/spgoo.org\/wp-content\/uploads\/2025\/02\/Capture-du-2025-02-20-11-07-16.png\" alt=\"\" class=\"wp-image-5358\" srcset=\"https:\/\/spgoo.org\/wp-content\/uploads\/2025\/02\/Capture-du-2025-02-20-11-07-16.png 445w, https:\/\/spgoo.org\/wp-content\/uploads\/2025\/02\/Capture-du-2025-02-20-11-07-16-248x300.png 248w\" sizes=\"auto, (max-width: 445px) 100vw, 445px\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"449\" height=\"540\" src=\"https:\/\/spgoo.org\/wp-content\/uploads\/2025\/02\/Capture-du-2025-02-20-11-07-48.png\" alt=\"\" class=\"wp-image-5359\" srcset=\"https:\/\/spgoo.org\/wp-content\/uploads\/2025\/02\/Capture-du-2025-02-20-11-07-48.png 449w, https:\/\/spgoo.org\/wp-content\/uploads\/2025\/02\/Capture-du-2025-02-20-11-07-48-249x300.png 249w\" sizes=\"auto, (max-width: 449px) 100vw, 449px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p>Comment impl\u00e9menter ces filtres du c\u00f4t\u00e9 web service ? <\/p>\n\n\n\n<p>On passe en mode json l&#8217;ensemble de la s\u00e9lection effectu\u00e9e par l&#8217;utilisateur . <\/p>\n\n\n\n<p>{&#8220;parametres&#8221;:&#8221;{&#8220;clogP&#8221;:{&#8220;min&#8221;:&#8221;0.00&#8243;,&#8221;max&#8221;:&#8221;5.00&#8243;},&#8221;nHA&#8221;:{&#8220;min&#8221;:&#8221;0&#8243;,&#8221;max&#8221;:&#8221;10&#8243;},&#8221;nHD&#8221;:{&#8220;min&#8221;:&#8221;0&#8243;,&#8221;max&#8221;:&#8221;5&#8243;},&#8221;MW&#8221;:{&#8220;min&#8221;:&#8221;0.00&#8243;,&#8221;max&#8221;:&#8221;500.00&#8243;}}&#8221;}<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@RequestMapping(value = \"\/find_inter_ambinter\", method = POST)\npublic Map&lt;String,List&lt;MoleculeAmbinter&gt;&gt; find_inter_ambinter(@RequestBody Map&lt;String, Map&lt;String,Map&lt;String, String&gt;&gt;&gt;body) {\n    final Map&lt;String, Map&lt;String, String&gt;&gt; collection = body.get(\"parametres\");\n    String Coll = \"D_S_Ambinter_5HT7\";\n    List&lt;AggregationOperation&gt; liste_op=new ArrayList&lt;AggregationOperation&gt;();\n    collection.keySet().forEach(elem -&gt; {\n        float fmin = Float.parseFloat(collection.get(elem).get(\"min\"));\n        float fmax = Float.parseFloat(collection.get(elem).get(\"max\"));\n        liste_op.add(Aggregation.match(new Criteria(elem).gt(fmin).lt(fmax)));\n    });\n    Map&lt;String, List&lt;MoleculeAmbinter&gt;&gt; liste_trouves = find_ambinter_5HT7(liste_op);\n    return liste_trouves;\n}<\/code><\/pre>\n\n\n\n<p>On compose l&#8217;ensemble de la requ\u00eate dans la fonction suivante et on ex\u00e9cute l&#8217;appel \u00e0 <span class='tooltipsall tooltipsincontent classtoolTips3'>MongoDB<\/span> <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public Map&lt;String, List&lt;MoleculeAmbinter&gt;&gt; find_ambinter_5HT7(List&lt;AggregationOperation&gt; liste_op) {\n    Map&lt;String, List&lt;MoleculeAmbinter&gt;&gt; liste_trouves = new HashMap&lt;&gt;();    \n    \/\/ uniquement en lien avec la Chembl\n    List&lt;AggregationOperation&gt; liste_op_temp=new ArrayList&lt;AggregationOperation&gt;();\n    liste_op.forEach(op-&gt; {\n        liste_op_temp.add(op);\n    });\n    AggregationOperation matchPost1 = Aggregation.match(new Criteria(\"links.Chembl\").exists(true));\n    AggregationOperation matchPost2 = Aggregation.match(new Criteria(\"links.Chimiotheque\").exists(false));\n    AggregationOperation projectStage = Aggregation.project(MoleculeAmbinter.class)\n         .and(ArrayOperators.Size.lengthOfArray(\"links.Chembl\")).as(\"sizeChembl\")\n         .andExclude(\"_id\");\n    AggregationOperation matchPre1 = Aggregation.match(new Criteria(\"sizeChembl\").gt(0));\n    AggregationOperation matchPre2 = null;\n    liste_op_temp.add(matchPost1);\n    liste_op_temp.add(matchPost2);\n    liste_op_temp.add( projectStage);\n    liste_op_temp.add(matchPre1);\n    Aggregation aggregation = Aggregation.newAggregation(liste_op_temp);        \n    AggregationResults&lt;MoleculeAmbinter&gt; output = mongoTemplate.aggregate(aggregation, \"D_S_Ambinter_5HT7\",\n            MoleculeAmbinter.class);\n    List&lt;MoleculeAmbinter&gt; result = output.getMappedResults();\n    liste_trouves.put(\"spgoo_chembl\", result);\n    return liste_trouves;\n}<\/code><\/pre>\n\n\n\n<p>Pour obtenir le r\u00e9sultat suivant :<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"446\" height=\"541\" src=\"https:\/\/spgoo.org\/wp-content\/uploads\/2025\/02\/Capture-du-2025-02-20-11-08-15.png\" alt=\"\" class=\"wp-image-5360\" srcset=\"https:\/\/spgoo.org\/wp-content\/uploads\/2025\/02\/Capture-du-2025-02-20-11-08-15.png 446w, https:\/\/spgoo.org\/wp-content\/uploads\/2025\/02\/Capture-du-2025-02-20-11-08-15-247x300.png 247w\" sizes=\"auto, (max-width: 446px) 100vw, 446px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"has-vivid-green-cyan-color has-text-color has-link-color has-medium-font-size wp-elements-fcdfb78482f9217e4ce0cd34d1fff279\">DeepBDD &#8211; D\u00e9cembre 2025 : <\/p>\n\n\n\n<p>Transfert et int\u00e9gration des diff\u00e9rentes collections corrig\u00e9es et compl\u00e9t\u00e9es par JMF dans le cadre de deepBdd-Bddictionnairique <\/p>\n\n\n\n<p>Les instructions sous <span class='tooltipsall tooltipsincontent classtoolTips3'>MongoDB<\/span> pour effectuer ce type de copie sont les suivantes: <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>db.collection1.find().forEach(function(x) {db.cons2025Finale.insert(x);})<\/code><\/pre>\n\n\n\n<p>Ce proc\u00e9d\u00e9 permet de copier avec l&#8217;id les \u00e9l\u00e9ments d&#8217;une collection \u00e0 une autre de fa\u00e7on int\u00e9grale, ce qui \u00e9vite de dupliquer certains \u00e9l\u00e9ments dans le cas o\u00f9 des requ\u00eates auraient des intersections non nulles. <\/p>\n\n\n\n<p>Pour le d\u00e9tail de cette op\u00e9ration voir la CDA-DeepBdd <\/p>\n\n\n\n<p class=\"has-vivid-green-cyan-color has-text-color has-link-color has-medium-font-size wp-elements-318d45d2f987dcd206d4e06a7c18eefd\">Passy &#8211; DPFV D\u00e9cembre 2025 : <\/p>\n\n\n\n<p>Dans le cadre de Passy, il a fallu d\u00e9velopper du c\u00f4t\u00e9 du web service une fonction d&#8217;extraction des segments situ\u00e9s avant et apr\u00e8s un segment sp\u00e9cifique. Pour ce faire, nous avons rajout\u00e9  l&#8217;ensemble des segments des enregistrements de type TRAITEMENT d&#8217;ESLO. D\u00e9velopper une fonction d&#8217;extraction qui s&#8217;appuie sur les attributs DEBUT et FIN de la collection. La fonction \u00e9quivalente sous <span class='tooltipsall tooltipsincontent classtoolTips3'>MongoDB<\/span> est : <\/p>\n\n\n\n<p>db.getCollection(\u2018eslo2\u2019).aggregate([{\u201c$addFields\u201d:{nouv:{$toDouble:\u201d$debut\u201d}}},{$match:{$and:[{$expr:{$gt:[\u201c$nouv\u201d,280.261]}},{$expr:{$lt:[\u201c$nouv\u201d,301.261]}},{\u201cenreg\u201d:\u201dESLO2_ENT_1010_C\u201d}]}}])<\/p>\n\n\n\n<p>Ce qui nous donne le code suivant dans Spring Boot : <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\t\t\/\/ chercher les segments avant et apr\u00e8s celui courant\n\t\t\/\/ on va prendre le debut -10 et la fin + 10 \n\t\t\/\/ db.getCollection('eslo2').aggregate(&#91;{\"$addFields\":{yvan:{$toDouble:\"$debut\"}}},{$match:{$and:&#91;{$expr:{$gt:&#91;\"$yvan\",280.261]}},{$expr:{$lt:&#91;\"$yvan\",301.261]}},{\"enreg\":\"ESLO2_ENT_1010_C\"}]}}])\t\t\n\t\t@RequestMapping(value = \"\/get_avant_\", method = POST)\n\t\t@PostMapping(\"json\")\n\t\tpublic List&lt;Proposition_IA> get_avant_(@RequestBody Map&lt;String, String> body) {\n\t\t\tString locuteur = body.get(\"locuteur\");\n\t\t\tdouble debut= Double.parseDouble(body.get(\"debut\"));\n\t\t\tdouble fin=  Double.parseDouble(body.get(\"fin\"));\n\t\t\tString enreg=  body.get(\"enreg\");\n\t\t\tSystem.out.println(\"get_avant_: \"+locuteur +\"  \" + debut +  \"  \" +fin +\" \" + enreg );\n\t\t\t\n\t\t\tAddFieldsOperation Addfield = Aggregation.addFields().addField(\"yvan\").withValue(ConvertOperators.ToDouble.toDouble(\"$debut\")).build();\n\t\t\t\/\/ avant \n\t\t\tCriteria critres = new Criteria().andOperator(\n\t\t\t\t\tCriteria.where(\"yvan\").lt(debut),\n\t\t\t\t\tCriteria.where(\"yvan\").gt(debut-10),\n\t\t\t\t\tCriteria.where(\"enreg\").regex(enreg));\n\t\n\t\t\tMatchOperation matchStage = Aggregation.match(critres);\n\t\t\tAggregation aggregation = Aggregation.newAggregation(Addfield, matchStage);\n\t\t\tAggregationResults&lt;Proposition_IA> output_avant = mongoTemplate.aggregate(aggregation, \"eslo2\", Proposition_IA.class);\n\t\t\tList&lt;Proposition_IA> avant_result = output_avant.getMappedResults();\n\t\t\tSystem.out.println(avant_result);\n\t\t\treturn avant_result;\n\t\t}\t<\/code><\/pre>\n<script type=\"text\/javascript\"> toolTips('.classtoolTips3','<a style=\"text-decoration: none;\" href=\"https:\/\/www.mongodb.com\/fr-fr\"><img style=\"width: 180px; height: 50px;\" src=\"\/wp-content\/uploads\/2025\/01\/mongodb-logo-rgb-scaled.jpg\" \/><\/a>'); <\/script>","protected":false},"excerpt":{"rendered":"<p>Solution MongoDB : NoSQL Langage : javascript Type: Document Description du mod\u00e8le de document utilis\u00e9 dans les diff\u00e9rents projets DeepBDD : est une plateforme Dictionnaire d\u00e9di\u00e9e \u00e0 l&#8217;anglais contemporain. Elle regroupe les dictionnaires Anglais, Am\u00e9ricain et Australien pour offrir aux chercheurs des fonctionnalit\u00e9s de manipulation et d&#8217;extraction ainsi que des fonctionnalit\u00e9s d&#8217;enrichissement de ce gisement [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-501","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/spgoo.org\/index.php?rest_route=\/wp\/v2\/pages\/501","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/spgoo.org\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/spgoo.org\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/spgoo.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/spgoo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=501"}],"version-history":[{"count":53,"href":"https:\/\/spgoo.org\/index.php?rest_route=\/wp\/v2\/pages\/501\/revisions"}],"predecessor-version":[{"id":11334,"href":"https:\/\/spgoo.org\/index.php?rest_route=\/wp\/v2\/pages\/501\/revisions\/11334"}],"wp:attachment":[{"href":"https:\/\/spgoo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=501"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}