MongoDB对象数据类型不会使用已定义的架构进行保存

时间:2014-09-07 21:23:41

标签: mongodb collections meteor schema

在CoffeeScript中使用Mongo和Meteor,我试图用一个对象保存文档:

Test = new SimpleSchema(
  tag:
    type: Object
)

插入:

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

结果:文档保存在数据库中,但是"标记"字段永远不会设置。

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

  1. 将数据类型更改为String,以及"标记"字段设置。但是,我想引用一个标记属性,而不必每次都解析字符串。

  2. 添加没有架构的集合可以按照我想要的方式保存Object:

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

    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
  )
)