簡體   English   中英

更新現有數據集上的唯一復合索引

[英]Update unique compound indexes on an existing data set

問題:

我正在嘗試更新現有數據集上的唯一復合索引,而Mongo不會更新索引。

背景:

在我們的Web應用程序的數據庫中,我們使用用戶的clubID和電子郵件提供了唯一的復合索引。 這意味着電子郵件在用戶的clubID方面必須是唯一的。

我正在更新此索引以允許用戶共享電子郵件。 我們在用戶模型上添加了一個名為“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。

新索引使用部分過濾器表達式。 這是未在現有數據集上創建的部分。

謝謝您的幫助!

山姆格魯斯

MongoDB無法更新現有索引。 您需要刪除當前索引並創建新索引。

來自https://docs.mongodb.com/manual/tutorial/manage-indexes/#modify-an-index

要修改現有索引,您需要刪除並重新創建索引。 此規則的例外是TTL索引,可以通過collMod命令結合索引集合標志進行修改。

您將不得不刪除並重新創建索引:

UserSchema.dropIndex({ email: 1, clubID: 1 })

然后重新創建它:

UserSchema.createIndex(
    { email: 1, clubID: 1 }, 
    { unique: true, 
        partialFilterExpression: 
        { email: { $exists: true },primaryAccountHolder: { $eq: true } }}
)

來自MongoDB文檔: https//docs.mongodb.com/manual/tutorial/manage-indexes/#modify-an-index

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM