我有一個模式,我希望用戶名欄位是唯一的,但它不作業("必填 "正常作業)。我嘗試了一下:重啟mongodb,放棄資料庫。我可以知道我錯過了什么嗎?
這是我的模式:
這是我的模式。
import mongoose, { HookNextFunction, model } from 'mongoose'/span>;
import bcrypt from 'bcrypt';
import { AdminDocument } from './interfaces'。
const AdminSchema = new mongoose.Schema(
{
username: { type: String, unique: true, required: true }。
email: { type: String, unique: true, required: true }。
password: { type: String, required: true }。
role: { type: Number, enum: [0, 1], required: true }。
address: { type: String },
phone: { type: String, required: true }。
photo: { type: String, default: null }。
name: { type: String, required: true }。
gender: { type: Number, enum: [0, 1, 2], required: true }。
refreshToken: { type: String, default: null },
},
{ timestamps: true }, { timestamps: true }
);
AdminSchema. pre('save', async function (next: HookNextFunction) {
let user = this as AdminDocument;
if (!user.isModified('password') {
return next()。
}
const salt = await bcrypt. genSalt(Number(process.env.SALT_WORK_FACTOR) )。)
const hashedPassword = await bcrypt.hash(user.password, salt)。
user.password = hashedPassword;
return next()。
});
AdminSchema.methods。 comparePassword = async function ()
candidatePassword: string
) {
const user = this as AdminDocument;
const isValid = await bcrypt.compare(candidPassword, user.password)。
return isValid。
};
export default model<AdminDocument>('Admin', AdminSchema) 。
uj5u.com熱心網友回復:
在Mongoose連接腳本中,使這些選項useCreateIndex和autoIndex變為true。
mongoose
.connect('connection url'/span>, {
useUnifiedTopology: true,
useNewUrlParser: true,
useCreateIndex: true, //make this true.
autoIndex: true, //make this 也是true。
})
.then(() => {
console.log('Connected to mongoDB') 。
});
然后從你的資料庫中洗掉模式。
uj5u.com熱心網友回復:
我已經通過使用mongodb compass創建一個索引來解決這個問題了。但問題是,我無法使用schema.index()方法為用戶名欄位創建索引,我也嘗試在用戶名屬性中設定索引:true和唯一:true,但都沒有用。這是為什么呢?
以下是我在mongoose模式的索引方法上所做的嘗試:
AdminSchema.index({ username。1 }, { unique: true })。)
console.log(AdminSchema.indexes)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/319823.html
標籤:
