我正在尝试在乐队成员的LastName上创建索引。结构如下所示:
我尝试过这两种方法:
collection.EnsureIndex("Members.LastName");
和
collection.EnsureIndex(new IndexKeysBuilder().Ascending("Members.LastName"), IndexOptions.SetUnique(true));
但我仍然可以添加具有相同姓氏的成员。甚至可以使用MongoDB在子文档列表上创建索引吗?如果是这样,怎么样?
修改
当我签入MongoVue时,索引就在那里,所以 正在创建:
这是id字段的索引:
答案 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命令。