Mongoose:唯一字段,如果它不为 null 或空字符串 [重复]

Posted

技术标签:

【中文标题】Mongoose:唯一字段,如果它不为 null 或空字符串 [重复]【英文标题】:Mongoose: Unique field if it's not null or an empty string [duplicate] 【发布时间】:2021-05-14 16:02:57 【问题描述】:

所以,我有以下架构:

const Players = new mongoose.Schema(
    discordID: 
    type: String,
    unique: true,
    required: function () 
        return typeof this.discordID !== "string" && this.discordID !== null
    
)

我的意思是让discordID 独一无二,但前提是它不是null""

我听说过 sparse,但它似乎没有按我的意愿工作。每次我尝试插入 2 个以上 discordID 设置为 null 的文档时都会出现重复错误(我尝试了 sparse: trueindex: sparse: true, unique: true)。

有什么我可以做的吗?如果可能的话,我想在架构级别保留此验证。

【问题讨论】:

【参考方案1】:

稀疏索引适用于省略键的文档。包含所需的discordID 并将其设置为null,该null 将被传递到数据存储中。

https://docs.mongodb.com/manual/core/index-sparse/

稀疏索引仅包含具有索引字段的文档的条目,即使索引字段包含空值。索引会跳过任何缺少索引字段的文档。

在 mongoose 中将字段设置为 undefined,以便在保存之前将其删除。

【讨论】:

这个答案很有帮助,但是,我正在寻找一种方法来插入具有空值的字段。我不想在文档中缺少字段。 发现了一个骗子,答案超过here...partial indexes

以上是关于Mongoose:唯一字段,如果它不为 null 或空字符串 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

mongodb/mongoose:如果来自nestjs的数据不为空,则保存唯一值

猫鼬中的唯一如果不是空检查

SQL 从 2 列中选择数据,如果它不为 NULL,则插入到视图中

yii2唯一验证器仅当字段不为空时

Mongoose 为 Number 字段接受 null

如果字段设置为 null,则恢复为 mongoose 中的默认值