node.js - Mongoose /keystonejs : unique field except if field is empty

标签 node.js mongodb mongoose keystonejs

我有一个电子邮件字段,我想要在其中添加唯一的电子邮件。我也希望有一个空场的可能性。如果电子邮件为空/空/不存在,我不希望它检查唯一性。

这是我在 Keystone 中定义的列表架构:

Book.add({
    number: { type: Types.Number },
    email: { type: Types.Email, initial: true, index: true, unique: true },
    token: { type: Types.Text },
    title: { type: Types.Text, initial: true },
    author: { type: Types.Text, initial: true },
    name: { type: Types.Text, initial: true },
    dedication: { type: Types.Textarea, initial: true },
    image: { type: Types.CloudinaryImage }
});

Keystone 公开了 Mongoose 模式,因此我可以访问它。我可以添加一个自定义验证,该验证会进行查询,除非字段为空,但我希望有更优雅的东西。

我已经有大量数据,我不知道这是否会使索引变得更加复杂。

最佳答案

我认为您问这个问题的事实是,当电子邮件字段留空时,unique: true 没有执行您想要的操作。

您可以尝试设置sparse: true,如图here ,如果 keystone 只是将其直接传递给模式,那么应该没问题。

如果没有,正如您提到的,最好的方法可能只是添加一个简单的预保存 Hook 来为您执行此操作,因为目前梯形失真校正中没有选项允许您执行此操作。

希望有所帮助(并让我知道 sparse: true 是否有效)!

关于node.js - Mongoose /keystonejs : unique field except if field is empty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37240996/

相关文章:

javascript - Grunt - fatal error 未定义不是函数

java - MongoDb 通过 jndi

node.js - 更新子文档中的数组 - mongoose mongodb

node.js - 如何检查具有电子邮件的用户是否已经存在?

javascript - 如何使用各种参数在 Mongoose 中进行搜索查询?

javascript - 使所需的依赖项可以从包外部访问

mongodb - Minimongo 在预测中还不支持 $ 运算符

node.js 电子邮件验证 token

javascript - 尝试在 Node.js 中提供 png : Cannot read property 'end' of undefined

javascript - Mongodb父引用树获取当前位置和完整路径