簡體   English   中英

貓鼬自定義架構類型日期間隔

[英]Mongoose custom schema type date interval

我的日期間隔類型的文檔中有很多字段,例如

{
    publishDate:
    {
       start: {type: Date, required: true},
       end: {type: Date, required: true}
    }
}

為了減少代碼重復並使其易於維護,如何創建包含兩個字段的自定義Mongoose類型(例如DateInterval)

  1. 開始
  2. 結束

並包含確保兩個字段均已填寫且開始於結束之前的驗證器?

您可以在貓鼬中重用架構。

var DateIntervalSchema = new Schema({
   start: {type: Date, required: true},
   end: {type: Date, required: true}
});

var SomeSchema = new Schema({
   publishDate: [DateIntervalSchema],
   // ... etc
});

您還可以參考其他館藏中的文檔。

var SomeSchema = new Schema({
   publishDate: {type: Schema.ObjectId, ref: 'DateInterval'}
});    

//using populate
SomeModel.findOne({ someField: "value" })
   .populate('publishDate') // <--
   .exec(function (err, doc) {
      if (err) ...

   })

您將要開發自定義架構類型。 已經有許多插件可以執行此操作,其中很多可以在這里找到: https : //github.com/aheckmann/mongoose-long/blob/master/lib/index.js 這是一個很好的基本示例。

然后,出於您的目的,您可以創建一個DateInterval自定義架構,將其強制轉換為Date類型,然后使用validator檢查startend -http://mongoosejs.com/docs/api.html#schematype_SchemaType-validate

由於 > = 4.4,您可以實現自定義架構類型

文檔不是很清楚,但是您可以按照以下示例操作

你必須:

  • 使用toBSON() / toJSON()toObject()原型方法定義DateInterval自定義對象

  • 定義DateIntervalType從繼承mongoose.SchemaType用於處理貓鼬整合,鑄造DateInterval

這樣,您可以實現對內存( Mongoose模型 )和mongodb( raw的bson )數據表示的完全控制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM