Latest web development tutorials

MongoDB automaticamente aumentar

MongoDB não é o mesmo que para o cultivo de capacidades SQL automaticamente, _id do MongoDB é de 12 bytes que identifica exclusivamente o sistema gerado automaticamente.

No entanto, em alguns casos, pode ser necessário para implementar ObjectId recurso de crescimento automático.

Porque MongoDB não implementar este recurso, que pode ser programado para alcançar, vamos conseguir o seguinte campo _id crescer reduzem automaticamente coleção.


coleção Usar contadores

Considere a seguinte documentação produtos. Esperamos conseguir com 1,2,3,4 campo _id para recurso crescimento n automática.

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

Para fazer isso, criar um conjunto de contadores, valores de campo de seqüência automática pode ser longo:

>db.createCollection("counters")

Agora vamos inserir os seguintes documentos aos contadores na coleção, use productid como chave:

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

campo sequence_value é uma sequência de valores pelo crescimento automático após.

Use a seguinte sequência de comandos para inserir os contadores de documentos da coleção:

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

Criando função JavaScript

Agora, criamos a função getNextSequenceValue como um nome de seqüência de entrada, a sequência especificada vai crescer automaticamente por 1 e devolve o valor de sequência mais recente. No exemplo nesta série de artigos chamada productid.

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

Use a função Javascript

Em seguida, vamos usar a função getNextSequenceValue para criar um novo documento e definir o valor da seqüência automático de documentos _id retornada é:

>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 você pode ver, usamos a função getNextSequenceValue para definir o campo _id.

A fim de verificar a eficácia da função, podemos usar o seguinte comando para ler o documento:

>db.products.find()

O comando acima irá retornar os seguintes resultados, encontramos campo _id é auto-crescimento:

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

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