如何在猫鼬模型上使用partialFilterExpression

时间:2019-08-09 16:22:16

标签: mongodb mongoose mongodb-indexes

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

这是该字段现在的样子

email: {
    type: String,
    index: true,
    unique: true
  }

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

2 个答案:

答案 0 :(得分:3)

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

email: {
  type: String
}

在架构级别使用:

SchemaName.index({ email: 1 }, {
  unique: true,
  partialFilterExpression: {
    'email': { $exists: true, $gt: '' }
  }
});

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

答案 1 :(得分:0)

您可以拥有类似的东西:

email: {
    type: String,
    index: {
      unique: true,
      partialFilterExpression: { email: { $type: 'string' } },
    },
    default : null
  }

但是在实际实现它之前,请务必阅读以下链接,因为默认设置似乎仅对新文档插入有效:-

Mongoose v5.6.9 Documentation