Database 更新现有数据集上的唯一复合索引
问题: 我正在尝试更新现有数据集上的唯一复合索引,而Mongo没有更新索引 背景: 在我们web应用程序的数据库中,我们使用用户的clubID和电子邮件创建了一个独特的复合索引。这意味着电子邮件对于用户的俱乐部出价必须是唯一的 我正在更新此索引,以允许用户共享电子邮件。我们在用户模型上添加了一个名为“primaryAccountHolder”的新属性。 我希望新的复合索引允许拥有相同俱乐部的用户共享电子邮件,但同一俱乐部中只有一个用户可以将primaryAccountHolder字段设置为true。我在本地使用此索引,但对现有数据集的更新不成功 我相信这是因为我们的数据库中存在不允许更新此索引的条目。所以我的问题是: 如何实现更新保持现有数据集唯一性的复合索引? 下面是我使用Mongoose/Typescript创建的索引。这些在本地工作,但不在我们现有的数据库上工作 旧索引: index({email:1,clubID:1},{unique:true}) //不允许同一俱乐部的用户拥有相同的电子邮件。这是我们数据库上的索引 新索引: index({email:1,clubID:1},{unique:true,partialFilterExpression:{email:{$exists:true},primarycountholder:{$eq:true}}) //将允许用户共享电子邮件,但其中只有一个用户可以将“主要帐户持有人”字段设置为true 新索引使用部分筛选器表达式。这是未在现有数据集上创建的零件 谢谢你的帮助Database 更新现有数据集上的唯一复合索引,database,mongodb,mongoose,mongoose-schema,compound-index,Database,Mongodb,Mongoose,Mongoose Schema,Compound Index,问题: 我正在尝试更新现有数据集上的唯一复合索引,而Mongo没有更新索引 背景: 在我们web应用程序的数据库中,我们使用用户的clubID和电子邮件创建了一个独特的复合索引。这意味着电子邮件对于用户的俱乐部出价必须是唯一的 我正在更新此索引,以允许用户共享电子邮件。我们在用户模型上添加了一个名为“primaryAccountHolder”的新属性。 我希望新的复合索引允许拥有相同俱乐部的用户共享电子邮件,但同一俱乐部中只有一个用户可以将primaryAccountHolder字段设置为tru
Sam GruseMongoDB无法更新现有索引。您需要删除当前索引并创建新索引 发件人: 要修改现有索引,需要删除并重新创建索引。此规则的例外情况是TTL索引,可以通过collMod命令结合索引集合标志对其进行修改
您必须删除并重新创建索引:
UserSchema.dropIndex({ email: 1, clubID: 1 })
然后重新创建它:
UserSchema.createIndex(
{ email: 1, clubID: 1 },
{ unique: true,
partialFilterExpression:
{ email: { $exists: true },primaryAccountHolder: { $eq: true } }}
)
来自MongoDB文档: