English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
O MongoDB não possui uma função de incremento automático embutida como os bancos de dados SQL. Pelo padrão, ele_id
do 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中的默认功能,因此我们将通过使用counters
Como isso não é uma função padrão do MongoDB, faremos isso através de
Veja a seguirproducts
o 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 umcounters
coleção, que rastreará o último valor de todos os campos sequenciais.
>db.createCollection("counters")
Agora, vamos inserir o seguinte documentoproductid
insira 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})
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; }
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"