Latest web development tutorials

MongoDB augmente automatiquement

MongoDB il n'y a pas le même que les capacités de SQL pour la croissance automatique, le _id de MongoDB est de 12 octets qui identifie de manière unique le système généré automatiquement.

Cependant, dans certains cas, nous pouvons être amenés à mettre en œuvre ObjectId fonction automatique de croissance.

Parce que MongoDB ne met pas en œuvre cette fonctionnalité, nous pouvons être programmés pour réaliser, nous allons atteindre le champ _id suivant croître compteurs automatiquement collection.


collection Utiliser des compteurs

Considérez la documentation des produits ci-dessous. Nous espérons atteindre à partir de 1,2,3,4 champ _id à fonctionnalité n de croissance automatique.

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

Pour ce faire, créer un ensemble de compteurs, les valeurs de champ de séquence automatique peut être longue:

>db.createCollection("counters")

Maintenant, nous insérons les documents suivants aux compteurs de la collection, l'utilisation productid comme la clé:

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

sequence_value champ est une séquence de valeurs de croissance automatique après.

Utilisez la séquence de commande suivante pour insérer les compteurs de documents de la collection:

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

Création de la fonction Javascript

Maintenant, nous créons la fonction getNextSequenceValue comme un nom de séquence d'entrée, la séquence spécifiée passera automatiquement par 1 et renvoie la dernière valeur de la séquence. Dans l'exemple de cette série d'article appelé productid.

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

Utilisez la fonction Javascript

Ensuite, nous allons utiliser la fonction getNextSequenceValue pour créer un nouveau document et définir la valeur de séquence automatique de documents _id renvoyée est:

>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 l'efficacité de la fonction, nous pouvons utiliser la commande suivante pour lire le document:

>db.products.find()

La commande ci-dessus retourne les résultats suivants, nous avons trouvé champ _id est auto-croissance:

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

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