Latest web development tutorials

MongoDB aumentará automáticamente

MongoDB no es la misma que las capacidades de SQL para el cultivo de forma automática, _id de MongoDB es de 12 bytes que identifica el sistema genera automáticamente.

Sin embargo, en algunos casos, puede ser necesario para implementar ObjectId característica de crecimiento automático.

Debido a MongoDB no implementa esta característica, se puede programarse para lograr, vamos a lograr crecer en el siguiente campo _id contrarresta automáticamente colección.


colección Usar contadores

Considere la siguiente documentación productos. Esperamos lograr a partir de 1,2,3,4 campo _id a la función de crecimiento n automática.

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

Para ello, cree un conjunto de contadores, los valores de campo de secuencia automática puede ser largo:

>db.createCollection("counters")

Ahora insertamos los siguientes documentos a los contadores de la colección, el uso como idproducto clave:

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

campo sequence_value es una secuencia de valores por el crecimiento automático después.

Utilice la siguiente secuencia de comandos para insertar los contadores de documentos de la colección:

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

La creación de la función Javascript

Ahora, creamos la función getNextSequenceValue como un nombre de secuencia de entrada, la secuencia especificada crecerá automáticamente en 1 y devuelve el último valor de secuencia. En el ejemplo de esta serie de artículos llamados idproducto.

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

Utilice la función de Javascript

A continuación vamos a utilizar la función getNextSequenceValue para crear un nuevo documento y establecer el valor de secuencia automático de documentos _id devuelto es:

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

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

Como se puede comprobar, utilizamos la función getNextSequenceValue para establecer el campo _id.

Con el fin de verificar la eficacia de la función, podemos usar el siguiente comando para leer el documento:

>db.products.find()

El comando anterior devolverá los siguientes resultados, encontramos campo _id es auto-crecimiento:

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

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