问题:
我正在尝试更新现有数据集上的唯一复合索引,而 Mongo 没有更新索引。
背景:
在我们的网络应用程序的数据库中,我们有一个使用用户的俱乐部 ID 和电子邮件的唯一复合索引。这意味着电子邮件对于用户的俱乐部 ID 而言必须是唯一的。
我正在更新此索引以允许用户共享电子邮件。我们在用户模型上添加了一个名为“primaryAccountHolder”的新属性。我希望新的复合索引允许具有相同 clubID 的用户共享电子邮件,但同一俱乐部中只有一个用户可以将字段 primaryAccountHolder 设置为 true。我有这个索引在本地工作,但我们现有数据集的更新不成功。
我相信这是因为我们的数据库中存在不允许更新该索引的条目。所以我的问题是:如何更新复合索引以保持现有数据集的唯一性?以下是我使用 Mongoose / Typescript 创建的索引。这些在本地工作,但不在我们现有的数据库上工作。
旧索引:
UserSchema.index({ email: 1, clubID: 1 }, { unique: true })
// 不允许同一俱乐部的用户拥有相同的电子邮件。这是我们数据库上的索引。
新索引:
UserSchema.index({ email: 1, clubID: 1 }, { unique: true, partialFilterExpression: { email: { $exists: true }, primaryAccountHolder: { $eq: true } } }
// 将允许用户共享电子邮件,但只有其中一个可以将主要帐户持有人字段设置为 true。
新索引使用部分过滤器表达式。这是未在现有数据集上创建的部分。
谢谢您的帮助!
山姆·格鲁斯