Me gustaría crear un esquema en el que pueda establecer un nombre específico para un usuario, por ejemplo, un nombre para mostrar que muchas personas puedan tener, y al mismo tiempo permitir que las personas los agreguen en función de ese nombre. Mi solución es guardar ese nombre en un modelo con dos campos, uno de los cuales es el nombre en sí mismo, el segundo tiene una identificación que representa la cantidad de veces que se usa ese nombre actualmente.
var DisplayName = new Schema({ account: { type: ObjectId, ref: 'Account', }, name: { type: String, trim: true, required: true, }, number: { type: Number, required: true, } });es lo que tengo, pero me gustaría poder decir
var displayName = new DisplayName({ name: 'name', account: req.user.id }); displayName.save();y establecería automáticamente el campo para mí?
EDITAR: me doy cuenta de que no había suficientes detalles en la pregunta original:
Me gustaría usar los controladores integrados posteriores al guardado de mongoose para generar este campo para mí en la creación. No debe actualizarse después de su creación, solo debe configurarse la primera vez.
Puede usar una función como se muestra a continuación para hacer eso.
function saveDisplayName(schema) { var query = DisplayName.find({name: schema.name}); query.then(function(results) { var userNumber = 1; if (results.length < 1) { return userNumber; } for (var i = 0; i <= results.length - 1; i++) { var result = results[i]; if (userNumber <= result.number) { userNumber = result.number + 1; } if (i == results.length - 1) { return userNumber; } } }).then(function(userNumber) { schema.number = userNumber; var displayName = new DisplayName(schema); return displayName.save(); }).then(function(data) { console.log('Data saved', data) }).then(null, console.log); }