English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
MongoDB no tiene una función de增量 automático envasado como las bases de datos SQL. Por defecto, se_id
del campo12El ObjectId de byte se utiliza como clave principal para identificar de manera única el documento. Sin embargo, en ciertos casos, podríamos desear que el campo _id tenga un valor automático y incremental además del ObjectId.
由于这不是MongoDB中的默认功能,因此我们将通过使用counters
Dado que esto no es una función predeterminada en MongoDB, lo haremos a través de
Utilice la colección de contadoresVea a continuación
products1,2,3,4a una secuencia de enteros autoincrementales desde
{ "_id":1, "product_name": "Apple iPhone", "category": "mobiles" }
Para esto, creamos uncounters
La colección, que rastreará los últimos valores de todos los campos de secuencia.
>db.createCollection("counters")
Ahora, insertaremos el siguiente documentoproductid
insertar en la colección counters como su clave-
> "_id":"productid", "sequence_value": 0 } WriteResult({ "nInserted" : 1 } >
El campo sequence_value rastrea el último valor de la secuencia.
Utilice el siguiente código para insertar este documento de secuencia en la colección counters-
>db.counters.insert({_id:"productid",sequence_value:0})
Ahora, crearemos una funcióngetNextSequenceValue
, esta función toma el nombre de la secuencia como entrada, suma1y devolver el número de secuencia actualizado. En nuestro ejemplo, el nombre de la secuencia esproductid
。
>function getNextSequenceValue(sequenceName){ var sequenceDocument = db.counters.findAndModify({ query:{_id: sequenceName }, update: {$inc:{sequence_value:1}}, new:true }); return sequenceDocument.sequence_value; }
Ahora, utilizaremos la función getNextSequenceValue cuando creamos un nuevo documento y asignemos el valor de secuencia devuelto al campo _id del documento.
Utilice el siguiente código para insertar dos documentos de ejemplo-
>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 puede ver, hemos utilizado la función getNextSequenceValue para establecer el valor del campo _id.
Para verificar la funcionalidad, utilicemos la orden find para obtener documentos-
>db.products.find()
La consulta superior devolvió los siguientes documentos con el campo _id de autoincremento-
{ "_id": 1, "product_name": "Apple iPhone", "category": "mobiles" { "_id": 2, "product_name": "Samsung S"3", "category": "mobiles"