2017-07-30 176 views
2

在貓鼬採用了獨特的約束,如:Azure Cosmos DB不支持MongoDB/Mongoose唯一索引嗎?

email: { type:String, unique:true } 

似乎並沒有工作。我可以用同一封電子郵件保存多個用戶。

有什麼我需要做的創建一個獨特的索引?

+0

您需要從集合**第一個**中刪除重複條目。該索引在創建時會失敗,因爲重複項存在,因此不會創建。另外一個常見的原因是編寫單元測試刪除數據庫,在發佈測試之前,「缺省」背景模式索引創建未完成。 –

+0

@NeilLunn這是一個新的集合 - 我沒有重複。此外,我讓它坐了一會兒,然後我提交了相同信息的第二條記錄。我熟悉常規Mongo DB的行爲。我特別詢問Azure Cosmos DB。 – drew

+1

Mongoose與Cosmos DB的MongoDB API是否支持唯一索引無關。 @ NeilLunn的標籤編輯是正確的,因爲這個問題直接關於Cosmos DB/DocumentDB(標籤是同義詞)。 –

回答

5

今天,在Cosmos DB的MongoDB API中不支持唯一索引。創建索引時不能指定unique:true

你需要在你的應用層實現這一點。

編輯 - 正如指出的,這是截至2017年11月正式發佈的MongoDB API。

-1

這可能是因爲您的收藏已爲您指定的字段重複了值。您需要刪除重複項或創建新數據庫以啓用唯一索引。

+0

正確 - 相應地更新了我的答案。感謝您指出了這一點。 –

+0

這不提供問題的答案。一旦你有足夠的[聲譽](https://stackoverflow.com/help/whats-reputation),你將可以[對任何帖子發表評論](https://stackoverflow.com/help/privileges/comment);相反,[提供不需要提問者澄清的答案](https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-c​​an- I-DO-代替)。 - [來自評論](/ review/low-quality-posts/18629547) – JordanHendrix

+0

無需創建新數據庫。您需要創建新的集合,因爲具有唯一約束的createIndex僅對Cosmos DB中的空集合起作用。如果您正在使用mongorestore/mongoimport導入現有集合,只需在Cosmos DB中的空集合上創建唯一索引後使用--noIndexRestore標誌執行此操作。 – alekseys