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