這段代碼有什么區別:
const userSchema = new Schema(
{
name: { type: String, required: true },
email: { type: String, required: true, unique: true },
password: { type: String, required: true },
phoneNumber: { type: Number, required: false, unique: true },
address: [{ type: mongoose.Types.ObjectID, required: true, ref: "Address" }],
},
{
timestamps: true,
}
);
而這段代碼:
const userSchema = new Schema(
{
name: { type: String, required: true },
email: { type: String, required: true, unique: true },
password: { type: String, required: true },
phoneNumber: { type: Number, required: false, unique: true },
address: { type: [mongoose.Types.ObjectID], required: true, ref: "Address" },
},
{
timestamps: true,
}
);
注意:
- 在第一個代碼中,我用方括號將整個
address物件括起來。 - 在第二個代碼中,我只用方括號將
type屬性括起來。address
我想知道的是這將如何影回應用程式的行為。有什么區別嗎?
謝謝。
uj5u.com熱心網友回復:
它們都宣告了一個參考陣列,但有一些細微的差別。
讓我們采用這個簡單的模式:
const userSchema = mongoose.Schema({
address: { type: [ String ], required: true, default: undefined }
});
const User = mongoose.model('User', userSchema);
這會將選項 (required和default) 應用于整個address字串陣列:
// This will fail validation:
// ValidatorError: Path `address` is required
const doc = new User({});
// This will pass validation:
const doc = new User({ address : [] });
現在更改模式中括號的位置:
const userSchema = mongoose.Schema({
address: [{ type: String, required: true, default: undefined }]
});
這會將選項應用于陣列的元素:address
// This will pass validation, `address` itself isn't required:
const user = new User({});
// This will also pass validation, for the same reason:
const user = new User({ address : [] });
// This will fail validation, because elements of the array are required to have a proper value
// ValidatorError: Path `address.0` is required
const user = new User({ address : [ '' ] });
編輯:如果你想強制該address欄位總是被定義并且至少有一個元素,你必須使用自定義驗證器。對于您的架構,它看起來像這樣:
address: {
type: [ mongoose.Schema.Types.ObjectID ],
ref: 'Address',
required: true,
default: undefined,
validate: a => Array.isArray(a) && a.length > 0
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/503968.html
標籤:javascript 节点.js mongodb 表示 猫鼬
上一篇:我正在嘗試創建訂閱,但發生錯誤
下一篇:根據實際月份和年份創建串列
