我正在開發一個應用程式,用戶可以使用 mongoDB 和 mongoose 將他的模型存盤在資料庫中。取自貓鼬教程,必須定義欄位的型別。例如這里我們必須定義名稱是一個字串。
const personSchema = new mongoose.Schema({
name: String
});
const Person = mongoose.model('Person', personSchema);
有沒有辦法讓它對用戶的輸入動態。我想創建一個表單,用戶將在其中輸入欄位名稱并選擇 Mongoose 提供的欄位型別之一 [String,Number,Date 等],但我想不出任何方法來實作它。老實說,即使這是一個好方法,我也不知道。另一種方法是將所有內容作為字串傳遞并序列化輸入以存盤它。我想實作這樣的目標:
const {fieldName,fieldType} = userInput;
const customSchema = new mongoose.Schema({
fieldName: fieldType
});
const CustomModel = mongoose.model('CustomSchema', customSchema);
這是可能的還是我應該實施另一種方法?另一種方法是將所有內容作為字串傳遞并序列化輸入以存盤它。
先感謝您!
uj5u.com熱心網友回復:
如果我理解正確,它應該像這樣作業:
- 用戶定義要存盤的模型
- 使用用戶提供的資料創建模式
- 用戶可以使用先前創建的模型將資料傳遞到存盤,該模型稍后將驗證用戶的輸入
事實上,我正在開發一個具有相同功能的專案。這是我們如何做到的。
用戶發送模型,我們將其存盤為字串,因為我們需要能夠再次創建模型。
當用戶使用創建的模型將新資料傳遞到存盤時,我們從 mongo 獲取字串并對其進行決議以創建模式。此操作相對容易(但取決于您想要實作的目標,因為如果您想要進行一些高級驗證,它可能會變得很棘手),因為您只需從
mongoose. 對于用戶定義的每個欄位都是這樣的。export const fieldConverter = ({name, type}) => { switch (type) { case 'String': return { [name]: String }; case 'Number': return { [name]: Number }; ... }準備好物件后,您可以從中創建模型。訪問模型的那一行
mongoose.models很重要,因為如果您再次嘗試創建模型,貓鼬會快取模型并引發錯誤。const DatasetModel = mongoose.models["your-model-name"] ?? mongoose.model("your-model-name", new mongoose.Schema(schema));現在,當您擁有模型時,其余的就像正常創建的模型一樣。
這種方法對我們有用,所以我將其添加為靈感,也許它會對您有所幫助。如果您對實施有任何具體問題,請隨時提出,我很樂意為您提供幫助。
Mixed如果您以后不需要驗證,mongoose中還有一個型別。你可以在這里查看:https ://mongoosejs.com/docs/schematypes.html#mixed
uj5u.com熱心網友回復:
您可以使用Schema.Types.Mixed, 一個“萬事如意”的 SchemaType。Mongoose 不會在混合路徑上進行任何轉換。
let customSchema = new Schema({custom: Schema.Types.Mixed})
在此處閱讀有關它的更多資訊
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/440278.html
