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" }