2014-02-06 95 views
1

我正試圖在樂隊成員的姓氏上創建一個索引。該結構是這樣的:是否可以在子文檔列表上創建唯一索引?

enter image description here

我已經試過這兩種方法:

collection.EnsureIndex("Members.LastName"); 

collection.EnsureIndex(new IndexKeysBuilder().Ascending("Members.LastName"), IndexOptions.SetUnique(true)); 

但我仍然可以用相同的姓氏添加成員。是否有可能使用MongoDB在子文檔列表上創建索引?如果是這樣,怎麼樣?

編輯

當我在MongoVue檢查,該指數是存在的,所以它正在創建

enter image description here

而這裏的id字段索引:

enter image description here

+0

爲什麼不允許樂隊擁有多於一名的姓氏相同的成員?如果它包含其中一個成員的兄弟或姐妹呢? –

+0

這只是我的例子。我的真實工作代碼不是樂隊和成員。 ;) –

回答

1

問題中的第二個代碼示例實際上是正確的。問題在於你第一次創建了索引而沒有唯一性。只需刪除索引,然後再次運行你的第二個代碼示例:

collection.EnsureIndex(new IndexKeysBuilder().Ascending("Members.LastName"), IndexOptions.SetUnique(true)); 

我還沒有使用的MongoDB的C#驅動程序,但我告訴你如何在它的殼來完成。比方說,我們有一個樣本文件,

{"_id": ObjectId(...) 
"name": "John Doe" 
"address": { 
    "street": "Main" 
    "zipcode": 53511 
    "state": "WI" 
    } 
} 

然後在其上創建address.zipcode指數(如與你的情況下),你這樣做,

db.people.ensureIndex({ "address.zipcode": 1 }) 

,以確保其獨一無二的,你做

db.people.ensureIndex({ "address.zipcode": 1 },{ unique: true }) 

我想你錯過了獨特的部分。欲瞭解更多信息繼承人的鏈接文檔12

如果你有收集一式兩份文檔和不介意失去他們,你也可以甚至使用dropDups命令。

+0

我的問題顯示了我的第二個代碼片段中的獨特部分。 –

+0

是實際創建的索引嗎?我的意思是你檢查了集合嗎? –

+0

是的。我只是添加了截圖到我的問題。 –

相關問題