我的架构如下:
const schema = new mongoose.Schema({
a: {
b: { type: String, unique: true },
c: { type: String }
},
aa: {
bb: [{
cc: { type: String, unique: true },
dd: { type: String }
}]
}
})
现在我想让 'b' 和 'cc' 字段是唯一的。 我该怎么做?
我在顶部代码的末尾添加了此代码,但架构允许重复值。
schema.index({'a.b':1}, {unique:true})
schema.index({'aa.bb.cc':1, {unique:true})
你有解决这个问题的想法吗?
答案 0 :(得分:1)
这里的答案完全取决于您所说的“我希望 'b' 和 'cc' 字段是唯一的。”
Mongoose 通过使用 unique:true
选项在该字段上创建 MongoDB 索引来实现唯一约束。
MongoDB 通过不允许相同的值在索引中存储两次来强制执行唯一选项。
当文档被写入 MongoDB 时,它从文档中提取索引所需的字段值,对列表进行去重,然后将这些值与指向文档的指针一起存储在索引中。
这意味着只有 1 个文档可能包含特定值,但该文档可能多次包含该值。
例如:
如果 {i:1}
上有索引,这些示例文档在索引中将包含以下条目:
文档 | 索引条目 |
---|---|
{i:1} | 1=> |
{i:[2,3,4] | 2=> |
3=> | |
4=> | |
{i:[5,6,5,6,5]} | 5=> |
6=> | |
{i:[2,6]} | 2=> |
6=> |
如果索引是唯一的,并且文档完全按照该顺序插入,则前 3 个文档将完全可以接受,而最后一个将导致重复键错误。