【问题标题】:Meteor Collection2: duplicate key error for nested uniqMeteor Collection2:嵌套 uniq 的重复键错误
【发布时间】:2016-02-19 23:35:38
【问题描述】:

我正在尝试制作一个快速脚本来初始化我在 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 吗?

【问题讨论】:

标签: mongodb meteor meteor-collection2


【解决方案1】:

好的,好像设置稀疏键为真修复索引问题:

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

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

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

【讨论】:

    猜你喜欢
    • 2016-12-20
    • 2014-01-27
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多