我有这个问题。我做了一个登录系统,它是这样工作的:
1.使用Discord登录
1.如果存在-如果用户更改了其Discord信息,则更新并返回用户信息。如果他们没有更改任何Discord帐户信息,只需返回用户信息
1.如果不存在-创建用户并返回用户信息
这是我的user.js
模式:
import mongoose from 'mongoose';
const Schema = mongoose.Schema
const userSchema = new Schema({
userId: {type: String, required: true, unique: true},
username: {type: String, required: true, unique: false},
type: {type: String, required: true},
discrim: {type: String, required: true},
email: {type: String, required: true},
avatar: {type: String, required: true},
banned: {type: Boolean, required: true}
})
const User = mongoose.model('User', userSchema)
export default User
字符串
还有登录系统登录(只是一个原型来显示问题):
app.post("/login-test", (req, res) => {
User.findOne({"userId": req.body.uid}).then((result) => {
console.log(result)
if(result == null){
const newUser = new User({
userId: req.body.uid,
username: "sharek1234",
discrim: "1236",
email: "sharekxass@gmail.com",
avatar: "bereknone",
banned: false,
type: "user"
})
newUser.save().then((resp) => {
res.json(resp)
})
}else{
User.updateOne({"userId": req.body.uid}, {
discrim: "1236",
email: "sharekxass@gmail.com",
avatar: "bereknone",
banned: false,
type: "user"
}).then((resp) => {
res.json(resp)
}).catch((pog) => {
console.log(pog)
res.json(pog)
})
}
})
})
型
但是当我尝试在Discord帐户信息更改后使用现有用户登录时,其中名称为“MyName 123”的其他用户已经存在,例如:
变更前:
UserID: "12345"
Username: "MyName"
Discrim: "1000"
型
变更后:
UserID: "12345"
Username: "MyName123"
Discrim: "9999"
型
返回E11000错误。E11000 duplicate key error collection: ShardDB.users index: username_1 dup key: { username: "MyName123" }
。请注意,userSchema
中的username
字段不是唯一的。
我不知道该怎么补救。
2条答案
按热度按时间fcipmucu1#
我解决了这个问题,我不知道为什么,但在我的数据库中有“username_1”索引,它被设置为唯一的。我删除了它,现在一切正常。
guz6ccqo2#
我知道这是固定的,但如果其他人有这个问题,这是因为该列是唯一的,然后被更改,因此索引已经创建。
就像OP提到的,删除索引可以解决这个问题。