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.