微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

向猫鼬模式中的对象对象添加鉴别器动态类型

如何解决向猫鼬模式中的对象对象添加鉴别器动态类型

我正在为猫鼬中的鉴别器的概念而苦苦挣扎。我基于 https://stackoverflow.com/a/36464686/4549743 构建了我当前的解决方案。但是我的结构略有不同。

我有一个帖子模型,允许用户添加自定义字段用户基本上可以在values的values对象中添加任意类型(Date、String、Number)作为键值对。每个新条目都以 title: {value: 'lorem',format: 'eg.文本,日期'}。请注意,格式键仅用于前端,并且始终可以是字符串。 'title' 可以是用户选择的任意值。我现在意识到我需要添加一个鉴别器来将日期和数字保存为自己的类型,以便根据日期等检索数据。

当前保存的帖子如下所示:

 {
    _id: ObjectId('6017b4f3ed8b0517220a04a1'),expiresAt: '2022-02-01T07:59:47.850+00:00'
    createdAt: '2021-02-01T07:59:47.850+00:00',values: {
       title: {
         value: 'Headline of post',format: 'text'
       },deadline: {
         value: '12-12-2021',format: 'date'
       },description: {
          value: 'Lore ipsum ...',format: 'string'
       }         
    }
 }

正如stackoverflow 中提到的,我需要添加一个鉴别器。然而,给出的答案仅适用于添加单个键值对的情况,而不是由许多不同类型的不同对象组成的对象。

我目前的解决方案是这样的。但是,当保存它时,值不会被保存。因此,我认为它一定是错误的,不能这样解释。 无功 猫鼬 = 要求('猫鼬'), 架构 = 猫鼬。架构, util = require('util')

function BaseSchema() {

  Schema.apply(this,arguments);

  this.add({
    createdAt: { type: Date,required: 'date required' },expiresAt: { type: Date,required: 'expire date required'}
  });

}

util.inherits(BaseSchema,Schema);

var post = new BaseSchema();

//Create Schemas for each possible type a user can add to the values property in POST.

var stringSchema = new BaseSchema({
  values: {
    value: String,format: String
  }
});

var numberSchema = new BaseSchema({
  values: {
    value: Number,format: String
  }
});

var dateSchema = new BaseSchema({
  values: {
    value: Date,format: String
  }
});


var Post = mongoose.model('Post',post),StringModel = Post.discriminator('StringModel',stringSchema),NumberModel = Post.discriminator('NumberModel',numberSchema),DateModel = Post.discriminator('DateModel',dateSchema)


// Compile model from schema

module.exports.Post = Post;

我认为问题出在某个地方,实际上是一个可以接受任何 [key] 的对象的对象。这似乎不能通过简单地执行:

var dateSchema = new BaseSchema({
      values: {
        value: Date,format: String
      }
    });

感谢您的帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。