Séquence d'auto-incrémentation
MongoDB ne dispose pas d'une fonctionnalité d'auto-incrémentation prête à l'emploi, comme les bases de données SQL. Par défaut, il utilise l'ObjectId de 12 octets du champ _id comme clé primaire pour identifier les documents de manière unique. Cependant, il peut y avoir des scénarios où nous souhaitons que le champ _id ait une valeur auto-incrémentée autre que l'ObjectId.
Comme il ne s'agit pas d'une fonctionnalité par défaut dans MongoDB, nous allons réaliser cette fonctionnalité de manière programmatique en utilisant une collection de compteurs comme le suggère la documentation de MongoDB.
Utilisation de la collection de compteurs
Considérons le document de produits suivant. Nous voulons que le champ _id soit une séquence d'entiers auto-incrémentés commençant par 1,2,3,4 jusqu'à n.
{
"_id":1,
"product_name": "Apple iPhone",
"category": "mobiles"
}
Pour cela, créez une collection de compteurs, qui conservera la trace de la dernière valeur de séquence pour tous les champs de séquence.
>db.createCollection("counters")
Maintenant, nous allons insérer le document suivant dans la collection de compteurs avec productid comme sa clé -
> db.counters.insert({
"_id":"productid",
"sequence_value": 0
})
WriteResult({ "nInserted" : 1 })
>
Le champ sequence_value garde la trace de la dernière valeur de la séquence.
Utilisez le code suivant pour insérer ce document de séquence dans la collection de compteurs -.
>db.counters.insert({_id:"productid",sequence_value:0})
Créer une fonction Javascript
Maintenant, nous allons créer une fonction getNextSequenceValue qui prendra le nom de la séquence en entrée, incrémentera le numéro de séquence de 1 et renverra le numéro de séquence mis à jour. Dans notre cas, le nom de la séquence est productid.
>function getNextSequenceValue(sequenceName){
var sequenceDocument = db.counters.findAndModify({
query:{_id: sequenceName },
update: {$inc:{sequence_value:1}},
new:true
});
return sequenceDocument.sequence_value;
}
Utilisation de la fonction Javascript
Besoin d'aide ?
Rejoignez notre communauté officielle et ne restez plus seul à bloquer sur un problème !