【问题标题】:MongoDB Object data type won't save with defined schemaMongoDB 对象数据类型不会与定义的模式一起保存
【发布时间】:2014-11-01 02:53:48
【问题描述】:

将 Mongo 和 Meteor 与 CoffeeScript 结合使用,我正在尝试使用一个对象保存文档:

Test = new SimpleSchema(
  tag:
    type: Object
)

然后插入:

test1 = new Meteor.Collection("test", { schema: Test})
test1.insert({ tag: {"name": "campus"} })

结果:文档被保存在数据库中,但“标签”字段从未设置。

我采取了几个不同的故障排除步骤:

  1. 将数据类型更改为 String 有效,并且设置了“tag”字段。但是,我想引用一个标签属性,而不必每次都解析字符串。

  2. 添加没有架构的集合可以完全按照我的意愿保存对象:

    test2 = new Meteor.Collection("test2")
    test2.insert({ tag: {"name": "campus"} })
    

编辑:修复了使用 blackbox: true 标志。请参阅下面的答案以获得澄清。

Test = new SimpleSchema(
  tag:
    type: Object
    blackbox: true
)

【问题讨论】:

    标签: mongodb collections meteor schema


    【解决方案1】:

    根据 SimpleSchema 文档,所有定义的属性都必须通过验证。因此,任何没有属性的 Object 数据类型都被视为空 Object,除非您添加 blackbox: true 标志。

    来源:http://atmospherejs.com/aldeed/simple-schema#blackbox

    如果您有一个 Object 类型的键,该对象的属性也将被验证,因此您必须在架构中定义所有允许的属性。如果这是不可能的,或者您不想验证对象的属性,请使用 blackbox: true 选项跳过对对象内所有内容的验证。

    【讨论】:

      【解决方案2】:

      我使用简单的模式并按照以下方式创建我的模型,我没有任何问题。

          Test = new Meteor.Collection("test", {
              schema: new SimpleSchema({
                  ownerId: {
                      type: String,
                  },
                  dateAdd: {
                      type: Date,
                  }
              })
          })
      
         Test.insert({ownerId:"123",dateAdd:"..."})
      

      在咖啡脚本中

      Test = new Meteor.Collection("test",
        schema: new SimpleSchema(
          ownerId:
            type: String
      
          dateAdd:
            type: Date
        )
      )
      

      【讨论】:

      • 谢谢,但我遇到的问题只是对象数据类型。日期和字符串会保存得很好。
      猜你喜欢
      • 2021-03-10
      • 2018-06-06
      • 2014-08-19
      • 2020-11-08
      • 1970-01-01
      • 2020-03-27
      • 1970-01-01
      • 2013-03-12
      • 1970-01-01
      相关资源
      最近更新 更多