Tutoriel MongoD...login
Tutoriel MongoDB
auteur:php.cn  temps de mise à jour:2022-04-21 17:49:03

Croissance automatique de MongoDB


MongoDB n'a pas de fonction de croissance automatique comme SQL. Le _id de MongoDB est un identifiant unique de 12 octets généré automatiquement par le système.

Mais dans certains cas, nous devrons peut-être implémenter la fonction de croissance automatique ObjectId.

Étant donné que MongoDB n'implémente pas cette fonction, nous pouvons l'implémenter par programme ci-dessous. Implémentez la croissance automatique du champ _id dans la collection counters.


Utiliser la collection de compteurs

Considérez le document de produits suivant. Nous voulons que le champ _id implémente Fonction d'incrémentation automatique de 1,2,3,4 à n.

{
  "_id":1,
  "product_name": "Apple iPhone",
  "category": "mobiles"
}

Pour ce faire, créez une collection de compteurs, et la valeur du champ de séquence peut être automatiquement longue :

>db.createCollection("counters")

Maintenant, nous insérons le document suivant dans la collection de compteurs, en utilisant productid comme clé :

{
  "_id":"productid",
  "sequence_value": 0
}

Le champ séquence_value est une valeur de la séquence après croissance automatique.

Insérer dans le document de séquence la collection de compteurs à l'aide de la commande suivante :

>db.counters.insert({_id:"productid",sequence_value:0})

Créer une fonction Javascript

Maintenant, nous créons la fonction getNextSequenceValue comme entrée pour le nom de la séquence, La séquence spécifiée est automatiquement incrémentée de 1 et la dernière valeur de séquence est renvoyée. Dans l'exemple de cet article la séquence est nommée productid .

>function getNextSequenceValue(sequenceName){
   var sequenceDocument = db.counters.findAndModify(
      {
         query:{_id: sequenceName },
         update: {$inc:{sequence_value:1}},
         new:true
      });
   return sequenceDocument.sequence_value;
}

Utilisation des fonctions Javascript

Ensuite, nous utiliserons la fonction getNextSequenceValue pour créer un nouveau document, Et en définissant automatiquement le document _id sur la valeur de séquence renvoyée :

>db.products.insert({
   "_id":getNextSequenceValue("productid"),
   "product_name":"Apple iPhone",
   "category":"mobiles"})

>db.products.insert({
   "_id":getNextSequenceValue("productid"),
   "product_name":"Samsung S3",
   "category":"mobiles"})

Comme vous pouvez le voir, nous utilisons la fonction getNextSequenceValue pour définir le champ _id.

Afin de vérifier si la fonction est valide, nous pouvons utiliser la commande suivante pour lire le document :

>db.products.find()

La commande ci-dessus retournera les résultats suivants, et nous constatons que le champ _id est auto-augmentant :

{ "_id" : 1, "product_name" : "Apple iPhone", "category" : "mobiles"}

{ "_id" : 2, "product_name" : "Samsung S3", "category" : "mobiles" }

Site Web PHP chinois