Meteor Collection2:嵌套uniq的重复键错误

时间:2016-02-19 23:35:39

标签: mongodb meteor meteor-collection2

我试图制作一个快速脚本来初始化Meteor中的开发集合,我发现了一些奇怪的东西。

这是我得到的一个简化示例:

    B = new SimpleSchema({
      name: { type: String, unique: true }
    })

    A = new SimpleSchema({
      name: { type: String, unique: true },
      bs: {type: [B], defaultValue: []}
    })

    As = new Mongo.Collection('as')
    As.attachSchema(A)

    As.remove({}, (e) => {
      As.insert({name: 'a_1', bs: []})
      As.insert({name: 'a_2', bs: []})
      As.insert({name: 'a_3', bs: []})
    })

当我的应用程序启动时,我收到以下错误:

MongoError: E11000 duplicate key error index: meteor.as.$c2_bs.$.name  dup key: { : null }

检查数据库我看到条目已经创建且没有B,更不用说有一个空名称了。

我重新安装流星以确保没有垃圾,但仍然会出现同样的错误。

从B模式中删除uniq约束修复了错误(当然,也允许我插入无效条目)。

我有什么遗失的吗?我不应该在嵌套模式中使用uniq吗?

1 个答案:

答案 0 :(得分:1)

好的,似乎设置稀疏键为true来修复索引问题:

B = new SimpleSchema({
  name: { type: String, unique: true, sparse: true }
})

A = new SimpleSchema({
  name: { type: String, unique: true },
  bs: {type: [B], defaultValue: []}
})

我仍然不确定这是否是一个好习惯(如果我想在独立集合上重新使用B模式,它仍将使用稀疏索引),但我似乎找不到更好的方法。 / p>