通过mongoose模式在mongodb中传输数据,但不传递唯一真密钥的值

我有这样一个mongoose模式:

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}}) 

当我尝试使用此代码保存数据在数据库中: –

  let newUser = User(); newUser.name = name; newUser.email = email; newUser.mobNum = mobNum; newUser.save(); 

当我运行服务器,并打我的API注册新用户只有第一次数据保存成功在mongodb当我尝试不同的值保存在分贝我有错误

那是 :-

 { 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] } 

因为我知道这个错误是与重复的用户名值有关,但我在数据库中保存数据时,我不存储用户名上的第一个API我下次保存用户名时,用户来我们的网页。

所以请解决这个错误。

在MongoDB中,一个唯一的字段在多个logging中不能为空 。 如果您的用户首先不提供用户名,但您仍然需要该字段是唯一的,那么您可以在第一次尝试时将随机string或手机号码或电子邮件存储为用户名。 我认为这会为你工作。

如果您希望创build一个随机string并将其分配给用户名,则可以使用crypto来尝试以下操作:

  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(); });