Mongoose忽略对象的一部分,除非定义为Schema.Types.Mixed

时间:2013-06-28 03:05:12

标签: javascript node.js mongodb coffeescript mongoose

抱歉咖啡脚本。

用这个把头发拉出来。我有一个类似于这样的架构:

reviewSchema = Schema
  title: String
  meta: 
    author: String
    date: String
  article: String
  tags: [
    type: Schema.Types.ObjectId
    ref: "Tag"
  ]
  images: [
    type: Schema.Types.ObjectId
    ref: "Image"
  ]
  attr: 
    appearance: String
    aroma: String
    flavor: String
    from: String
    grade: String
    lineage: String
    name: String
    overall: String
    packaging: String
    pickupdate: String
    price: String
    reason: String
    story: String
    type: String
Review = mongoose.model 'Review', reviewSchema

我还有一些数据已经汇总到一些带有相应数据的JSON文件中。当我去创建一个新模式时,我会查看该文件并获取JSON并通过以下方式创建一个新的评论对象:

thisReview = new Review json,最小化:false

如果我在创建'thisReview'之前调试json json,我看到我的'attr'键正确地填充了数据但是如果我在console.log'thisReview'或检查数据库,我收到的结果没有' attr'我的文件的关键。 'attr'完全被忽略了。

我确保每个JSON文件的JSON.attr对象都具有来自模式的每个密钥,并且对于那些不存在的字符串具有“”(空)字符串。其他嵌套对象(如架构的元对象)完美填充。

知道发生了什么事吗?

额外信息:当我摆脱attr对象中的键/值对并改为分配:     attr:Schema.Types.Mixed

然后成功保存所有数据,包括空(“”)字符串。

任何帮助都会 赞赏。

1 个答案:

答案 0 :(得分:2)

type的{​​{1}}属性可能会使Mongoose绊倒,以为attr是一个字符串而不是一个嵌入对象。对属性使用更明确的定义,如下所示:

attr