mongodb 具有唯一约束的Mongoose字符串架构属性

mdfafbf1  于 2023-11-17  发布在  Go
关注(0)|答案(1)|浏览(202)

如果在Mongoose中有以下模式,它会如何影响集合?

import { Schema } from "mongoose";

export interface IString {
  property: string;
}

export const PriceOverhaulSchema = new Schema<IString>({
  property: { type: String, required: false, unique: true },
});

字符串
我的问题是关于这个模式中唯一约束的行为。如果我有一个没有设置属性字段的文档,我可以有另一个文档而不违反唯一性约束吗?换句话说,唯一性约束只应用于设置了属性的文档,还是不管是否设置了属性都强制执行唯一性约束?
我感谢对这一问题的任何澄清。

sg2wtvxw

sg2wtvxw1#

首先,如果您将required: true, unique: true属性添加到新模式的字段中,然后在集合中创建第一个文档,mongoose将为您添加一个唯一的索引,这将强制唯一性。
但是,如果您将required: false, unique: true属性添加到新模式中,然后创建第一个文档,mongoose将不会创建唯一索引,直到您创建包含该字段的文档。
这是一个静音点,因为一旦你建立了索引,一旦你创建了一个没有包含该字段的文档,mongoose就会在它的位置添加一个空值。
这意味着,如果你创建了另一个文档,但没有包含该字段,mongoose将抛出E11000 duplicate key error。这仅仅是因为你已经有一个文档的值为空,所以唯一性是强制的!
这表明,当unique: true时,将其设为required: false真的没有意义。

相关问题