English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Sequência de Aumento Automático MongoDB

O MongoDB não possui uma função de incremento automático embutida como os bancos de dados SQL. Pelo padrão, ele_iddo campo12O ObjectId do byte é usado como chave primária para identificar unicamente o documento. No entanto, em algumas situações, podemos desejar que o campo _id tenha valores autônomos incrementais além do ObjectId.

由于这不是MongoDB中的默认功能,因此我们将通过使用countersComo isso não é uma função padrão do MongoDB, faremos isso através de

Use a coleção de contadores para implementar essa função de forma programática, conforme recomendado pelos documentos do MongoDB.

Veja a seguirproductso campo _id deve ser um de1,2,3,4um inteiro sequencial auto-incrementado de 1 a n.

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

Para isso, crie umcounterscoleção, que rastreará o último valor de todos os campos sequenciais.

>db.createCollection("counters")

Agora, vamos inserir o seguinte documentoproductidinsira como sua chave na coleção counters-

>
	"_id":"productid",
	"sequence_value": 0
)
WriteResult({ "nInserted" : 1 )
>

o campo sequence_value rastrea o último valor da sequência.

Utilize o seguinte código para inserir este documento sequencial na coleção counters-

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

Crie uma função JavaScript

Agora, criaremos uma funçãogetNextSequenceValue, esta função recebe o nome da sequência como entrada, adiciona1e retornar o número sequencial atualizado. No nosso exemplo, o nome da sequência éproductid

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

Utilize a função JavaScript

Agora, usaremos a função getNextSequenceValue ao criar um novo documento e atribuir o valor de sequência retornado ao campo _id do documento.

Utilize o seguinte código para inserir dois documentos de exemplo-

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

Como você vê, usamos a função getNextSequenceValue para definir o valor do campo _id.

Para verificar a funcionalidade, vamos usar o comando find para obter o documento-

>db.products.find()

A consulta acima retornou os seguintes documentos com campo _id de aumento automático:-

{ "_id": 1, "product_name": "Apple iPhone", "category": "mobiles"
{ "_id": 2, "product_name": "Samsung S"3", "category": "mobiles"