是否可以在子文档列表上创建唯一索引?

时间:2014-02-06 15:49:40

标签: c# mongodb

我正在尝试在乐队成员的LastName上创建索引。结构如下所示:

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

1 个答案:

答案 0 :(得分:1)

问题中的第二个代码示例实际上是正确的。问题是您是第一次创建索引而不是唯一的。只需删除索引并再次运行第二个代码示例:

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

我没有使用MongoDB的C#驱动程序,但我告诉你它是如何在shell中完成的。假设我们有一个示例文档,

{"_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 } )

我认为你错过了独特的部分。有关详细信息,请参阅文档1的链接 和2

如果您在集合中有重复的文档并且不介意丢失它们,您甚至可以使用dropDups命令。