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

Viv*_*edi 0 mongoose mongodb mongoose-schema

如果字段不为空,是否有内置的方法来说明字段应该是唯一的。例如,我希望用户拥有唯一的电话号码,但这不是必填字段。因此它可以为空,因此如果添加了另一个没有电话号码的用户,它将打破唯一约束。

这几乎是同一个问题:mongoDB/mongoose: unique if not null但对于mongoose和 mongodb 的较新版本,我想应该有更好的方法来实现这一点。

sty*_*dev 5

如果您不喜欢像您提供的答案那样结合稀疏索引和唯一索引

db.users.ensureIndex({ phone: 1 }, { unique: true, sparse: true });
Run Code Online (Sandbox Code Playgroud)

您可以使用partial index,它未在 mongoose 中实现,但可用作本机运算符。

db.users.createIndex(
   { phone: 1 },
   { partialFilterExpression: { phone: { $exists: true } } }
)
Run Code Online (Sandbox Code Playgroud)