如何在猫鼬模型上使用 partialFilterExpression

Nav*_*ish 4 mongoose mongodb mongodb-indexes

我创建了一个具有电子邮件字段的猫鼬模型。如果用户提供了值,我希望它是唯一的,但如果用户未提供任何值,我希望它为空。我在这里找到了一个很好的 mongodb 参考:https ://docs.mongodb.com/manual/core/index-partial/#partial-index-with-unique-constraints可以工作,但我不知道如何制作在猫鼬上工作

这就是这个领域现在的样子

email: {
    type: String,
    index: true,
    unique: true
  }
Run Code Online (Sandbox Code Playgroud)

如果我保持原样,我将无法使用空/空电子邮件字段创建多个文档

小智 8

在电子邮件路径级别,您只能使用:

email: {
  type: String
}
Run Code Online (Sandbox Code Playgroud)

并在架构级别使用:

SchemaName.index({ email: 1 }, {
  unique: true,
  partialFilterExpression: {
    'email': { $exists: true, $gt: '' }
  }
});
Run Code Online (Sandbox Code Playgroud)

这样,仅当电子邮件存在且不是空字符串时才应用唯一约束


sri*_*asy 4

你可以有类似的东西:

email: {
    type: String,
    index: {
      unique: true,
      partialFilterExpression: { email: { $type: 'string' } },
    },
    default : null
  }
Run Code Online (Sandbox Code Playgroud)

但在实际实现之前,请务必阅读下面的链接,因为默认值似乎仅适用于新文档插入:-

Mongoose v5.6.9 文档

  • @Navish:您正在查看的问题是什么,您正在执行插入或更新吗?您是否尝试删除已创建的索引并运行它? (2认同)