如果在Mongoose中有以下模式,它会如何影响集合?
import { Schema } from "mongoose";
export interface IString {
property: string;
}
export const PriceOverhaulSchema = new Schema<IString>({
property: { type: String, required: false, unique: true },
});
字符串
我的问题是关于这个模式中唯一约束的行为。如果我有一个没有设置属性字段的文档,我可以有另一个文档而不违反唯一性约束吗?换句话说,唯一性约束只应用于设置了属性的文档,还是不管是否设置了属性都强制执行唯一性约束?
我感谢对这一问题的任何澄清。
1条答案
按热度按时间sg2wtvxw1#
首先,如果您将
required: true, unique: true
属性添加到新模式的字段中,然后在集合中创建第一个文档,mongoose将为您添加一个唯一的索引,这将强制唯一性。但是,如果您将
required: false, unique: true
属性添加到新模式中,然后创建第一个文档,mongoose将不会创建唯一索引,直到您创建包含该字段的文档。这是一个静音点,因为一旦你建立了索引,一旦你创建了一个没有包含该字段的文档,mongoose就会在它的位置添加一个空值。
这意味着,如果你创建了另一个文档,但没有包含该字段,mongoose将抛出
E11000 duplicate key error
。这仅仅是因为你已经有一个文档的值为空,所以唯一性是强制的!这表明,当
unique: true
时,将其设为required: false
真的没有意义。