【问题标题】:Creating a dictionary schema with Mongoose使用 Mongoose 创建字典模式
【发布时间】:2014-09-21 17:25:51
【问题描述】:

我正在尝试使用 Mongoose 存储对象字典。意识到我失去了使用 Mixed 类型保存的更改检测,我希望我可以创建一个不需要 Mixed 类型的模式。

有很多为对象数组创建模式的示例,但不是对象字典。可以这样做吗?

格式:

{
    ObjectId : {
        "attempts" : {
            "response" : String,
            "timestamp" : Date
        },
        "complete" : Boolean
    }
}

【问题讨论】:

  • 您展示的架构很好,但我不明白为什么您的示例格式中有ObjectId
  • 碰巧我用作键的字符串是一个ObjectId

标签: javascript node.js mongodb mongoose


【解决方案1】:

mongoose 不支持字典。字段名称在架构中不能是动态的。您应该使用原始对象(嵌入文档)并将其实现为字典。但是mongoose 不会进行验证,并且在您更改该字段时保存之前使用markModified

var fooSchema=mongoose.Schema({name:String, dic:{}});
//dic is your dictionary

【讨论】:

  • 如何严格键值数据类型?
【解决方案2】:

更新:从 5.1 开始,猫鼬有一个地图类型:https://mongoosejs.com/docs/schematypes.html#maps

【讨论】:

    【解决方案3】:

    meta 作为字典,您可以拥有这样的字典:

    var UserSchema = new Schema({
      meta: {
        votes: Number,
        favs:  Number
      }
      first_name:  String,
      last_name: String,
      profile_pic:   String,
      gender: String,
      timezone: Number
      date: { type: Date, default: Date.now },
      updated: { type: Date, default: Date.now },
      country: {id: Number, name: String}
    
    
    });
    

    【讨论】:

      猜你喜欢
      • 2018-02-07
      • 1970-01-01
      • 1970-01-01
      • 2019-01-13
      • 1970-01-01
      • 2015-12-08
      • 1970-01-01
      • 1970-01-01
      • 2017-01-14
      相关资源
      最近更新 更多