node.js - collection - mongoose js increment
Crea un Ășnico campo de autoincremento con mangosta (2)
Este es un buen ejemplo de la implementación de campos con incremento automático utilizando Mongoose:
var CounterSchema = Schema({
_id: {type: String, required: true},
seq: { type: Number, default: 0 }
});
var counter = mongoose.model(''counter'', CounterSchema);
var entitySchema = mongoose.Schema({
testvalue: {type: String}
});
entitySchema.pre(''save'', function(next) {
var doc = this;
counter.findByIdAndUpdate({_id: ''entityId''}, {$inc: { seq: 1} }, function(error, counter) {
if(error)
return next(error);
doc.testvalue = counter.seq;
next();
});
});
Debe realizar el Paso 1 de la documentación de mongodb en primer lugar.
Dado un esquema:
var EventSchema = new Schema({
id: {
// ...
},
name: {
type: String
},
});
Quiero hacer la id
única y autoincremento. Intento realizar la implementación de mongodb pero tengo problemas para entender cómo hacerlo correctamente en la mangosta.
Mi pregunta es : ¿cuál es la forma correcta de implementar el campo de autoincremento en mongoose sin usar ningún complemento, etc.?
Sí, aquí está el "flaco" en esa característica.
Necesitas tener esa colección en tu base de datos de mongo. Actúa como asignación de clave concurrente solo registro de verdad si lo desea. El ejemplo de Mongo le muestra cómo realizar una operación "atómica" para obtener la siguiente clave y asegurarse de que incluso en las solicitudes simultáneas se le garantice que se le devolverá la clave única sin colisiones.
Pero, mongodb no implementa ese mecanismo de forma nativa, te muestran cómo hacerlo. Solo permiten que el _id se utilice como clave de documento única. Espero que esto aclare su enfoque.
Para expandir la idea, siga adelante y agregue la implementación sugerida por Mongo a su modelo de Mongoose definido y, como ya adivinó, úselo en el evento Pre-save o, mejor aún, pre-init para asegurarse de que siempre genere una ID si trabaja con un lado del servidor de recopilación antes de guardarlo en mongo.