CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[MongoDB] enregistrer une function Js

ChibreMusque2
ChibreMusque2
Niveau 8
21 mai 2021 à 20:15:19

Heyheyhey

Vu qu'il n'y a pas de méthode native pour créer un field qui s'incrémente automatiquement, sur la doc officielle, ils expliquent comment faire : https://docs.mongodb.com/v3.0/tutorial/create-an-auto-incrementing-field/

ça consiste simplement à enregister une fonction écrite en js sur db.system.js (https://docs.mongodb.com/manual/tutorial/store-javascript-function-on-server/) puis l'appeler si besoin et elle nous retournera un nouvel index incrémenté à chaque fois.

Le pb que je rencontre est que mon incrémentation est spéciale puisqu'elle se fait sur un string de 6 caractères en base 36 [0-9A-Z] en gros j'ai donc écrit une fonction en js qui fait ça :

 function incrementStringV2() {
    let value = db.counters.find({_id:"gameCallNumber"},{_id:1})._id;
    const base = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    let i = value.length-1;
    var res = "";
    while(value[i]=="Z"){
        res+="0";
        i--;
    }
    res = value.substring(0,i)+base[base.indexOf(value[i])+1]+res;

    return res;
}

et est inclue dans une requête mongo qui donne ça :

db.system.js.insertOne(
    {
      _id: "nextGameCallNumber",
      value : function getNextSequence() {

                function incrementStringV2() {
                    let value = db.counters.find({_id:"gameCallNumber"},{_id:1})._id;
                    const base = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
                    let i = value.length-1;
                    var res = "";
                    while(value[i]=="Z"){
                        res+="0";
                        i--;
                    }
                    res = value.substring(0,i)+base[base.indexOf(value[i])+1]+res;
                
                    return res;
                }
          
                var ret = db.counters.findAndModify(
                    {
                        query: { _id: "gameCallNumber" },
                        update: { seq: 8 },
                        new: true
                    }
                );
            
                return ret.seq;
            }
    }
 );

Le problème que je rencontre est que le storage de fonctions js ne fonctionne pas chez moi. J'exécute l'exe fourni sur le site mongodb.com via mon cmd et même quand je passe les fonctions de la doc officielle ça me marque toujours les même erreurs :

WriteCommandError@src/mongo/shell/bulk_api.js:417:48
executeBatch@src/mongo/shell/bulk_api.js:915:23
Bulk/this.execute@src/mongo/shell/bulk_api.js:1163:21
DBCollection.prototype.insertOne@src/mongo/shell/crud_api.js:264:9
@(shell):1:1

Le soucis c'est qu'il y a peu de contenu sur internet pour expliquer ce genre de pb.

ChibreMusque2
ChibreMusque2
Niveau 8
21 mai 2021 à 20:39:39

Bon, je crois que j'ai trouvé une piste, il faut que je fasse ces manips en tant qu'admin, le pb c'est qu'hébergeant mon serveur sur mongodb.com et étant un noob en mongodb j'ai aucune idée de comment faire ayoo

GauloisDeter4
GauloisDeter4
Niveau 8
22 mai 2021 à 21:54:02

https://stackoverflow.com/questions/41444213/how-do-i-increment-a-number-value-in-mongoose/41444359

Peut être que j'ai pas compris mais tu t'embêtes trop je pense.

Si tu utilises nodejs passe par mongoose :ok:

ChibreMusque2
ChibreMusque2
Niveau 8
22 mai 2021 à 23:16:11

Le 22 mai 2021 à 21:54:02 :
https://stackoverflow.com/questions/41444213/how-do-i-increment-a-number-value-in-mongoose/41444359

Peut être que j'ai pas compris mais tu t'embêtes trop je pense.

Si tu utilises nodejs passe par mongoose :ok:

Ouais j'ai fait ça histoire de pas attendre avant d'avancer mon code et ça marche bien, mais pour ma culture générale j'aimerais malgré tout savoir comment résoudre mon problème ahah

Message édité le 22 mai 2021 à 23:19:05 par ChibreMusque2
Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment