Tengo un esquema de mangosta como este: -
var UserSchema = new Schema({ name: {type: String, required: true}, email: {type: String, required: true,unique: true}, mobNum: {type: String, required: true, unique: true}, username: {type: String, unique: true}, dob:{ type: Date}, isTempUser: {type: String, default: true}, mobNumVerified: {type: Boolean, default: false}, emailVerified: {type: Boolean, default: false}, registrationComplete: {type: Boolean, default: false}})Cuando trato de guardar datos en db con este código: -
let newUser = User(); newUser.name = name; newUser.email = email; newUser.mobNum = mobNum; newUser.save();cuando ejecuto el servidor y presiono mi api para registrar un nuevo usuario solo los datos se guardan con éxito en mongodb cuando intento guardar un valor diferente en db obtuve un error
ese es :-
{ MongoError: E11000 duplicate key error collection: okhlee-kdb-promoter.users index: username_1 dup key: { : null } at Function.MongoError.create (D:\Okhlee.com\KDB Promoter backend\node_modules\mongodb-core\lib\error.js:31:11) at toError (D:\Okhlee.com\KDB Promoter backend\node_modules\mongodb\lib\utils.js:139:22) at D:\Okhlee.com\KDB Promoter backend\node_modules\mongodb\lib\collection.js:659:23 at handleCallback (D:\Okhlee.com\KDB Promoter backend\node_modules\mongodb\lib\utils.js:120:56) at D:\Okhlee.com\KDB Promoter backend\node_modules\mongodb\lib\bulk\unordered.js:465:9 at handleCallback (D:\Okhlee.com\KDB Promoter backend\node_modules\mongodb\lib\utils.js:120:56) at resultHandler (D:\Okhlee.com\KDB Promoter backend\node_modules\mongodb\lib\bulk\unordered.js:413:5) at D:\Okhlee.com\KDB Promoter backend\node_modules\mongodb-core\lib\connection\pool.js:461:18 at _combinedTickCallback (internal/process/next_tick.js:73:7) at process._tickCallback (internal/process/next_tick.js:104:9) name: 'MongoError', message: 'E11000 duplicate key error collection: okhlee-kdb-promoter.users index: username_1 dup key: { : null }', driver: true, code: 11000, index: 0, errmsg: 'E11000 duplicate key error collection: okhlee-kdb-promoter.users index: username_1 dup key: { : null }', getOperation: [Function], toJSON: [Function], toString: [Function] }Como sé, este error está relacionado con el valor duplicado del nombre de usuario , pero cuando guardo datos en db, no guardo el nombre de usuario en la primera API, guardo el nombre de usuario la próxima vez que el usuario ingrese a nuestra página web.
Así que por favor solucione este error.
En MongoDB, un campo único no puede estar vacío en varios registros . Si su usuario no proporciona el nombre de usuario al principio, pero aún necesita que el campo sea único, puede almacenar una cadena aleatoria o un número de teléfono móvil o un correo electrónico como nombre de usuario en el primer intento. Creo que eso funcionará para ti.
Si desea crear una cadena aleatoria y asignarla a un nombre de usuario, puede intentar lo siguiente usando criptografía:
let newUser = User(); newUser.name = name; newUser.email = email; newUser.mobNum = mobNum; require('crypto').randomBytes(48, function(err, buffer) { if(err) { throw err } username = buffer.toString('hex'); newUser = username; newUser.save(); });