多个组合键
Multiple composite keys
这是我的实体:
{
name: "",
list: [{
a: 1,
b: 1
}]
}
我想创建两个索引,一个按名称,另一个同时用于 a 和 b。
示例:尝试插入 a=1 和 b=1 两次一定会引发错误。
我的 mongodb 驱动程序是 2.
对于名字,我是这样工作的:
await collection.Indexes.CreateOneAsync(Builders<MyEntity>.IndexKeys.Ascending(m => m.Name), new CreateIndexOptions()
{
Unique = true,
Sparse = true
});
如何为列表中的两个属性执行此操作?
从 C# 端,您可以使用 IndexKeys.Combine
助手来创建这样的索引:
await coll.Indexes.CreateOneAsync(Builders<MyEntity>.IndexKeys.Combine(
Builders<MyEntity>.IndexKeys.Ascending("list.a"),
Builders<MyEntity>.IndexKeys.Ascending("list.b")), new CreateIndexOptions()
{
Unique = true,
Sparse = true
});
一个奇怪的行为是约束是 not enforced within a single document (SERVER-1068) 因为索引不被视为 'within' 文档,可以这么说。换句话说,您总是可以插入文档 list : [ {a:1, b:1}, {a:1, b:1} ]
,即具有包含副本的列表的文档。这在应用程序方面很容易修复,但了解它可能会很好。
这是我的实体:
{
name: "",
list: [{
a: 1,
b: 1
}]
}
我想创建两个索引,一个按名称,另一个同时用于 a 和 b。
示例:尝试插入 a=1 和 b=1 两次一定会引发错误。
我的 mongodb 驱动程序是 2.
对于名字,我是这样工作的:
await collection.Indexes.CreateOneAsync(Builders<MyEntity>.IndexKeys.Ascending(m => m.Name), new CreateIndexOptions()
{
Unique = true,
Sparse = true
});
如何为列表中的两个属性执行此操作?
从 C# 端,您可以使用 IndexKeys.Combine
助手来创建这样的索引:
await coll.Indexes.CreateOneAsync(Builders<MyEntity>.IndexKeys.Combine(
Builders<MyEntity>.IndexKeys.Ascending("list.a"),
Builders<MyEntity>.IndexKeys.Ascending("list.b")), new CreateIndexOptions()
{
Unique = true,
Sparse = true
});
一个奇怪的行为是约束是 not enforced within a single document (SERVER-1068) 因为索引不被视为 'within' 文档,可以这么说。换句话说,您总是可以插入文档 list : [ {a:1, b:1}, {a:1, b:1} ]
,即具有包含副本的列表的文档。这在应用程序方面很容易修复,但了解它可能会很好。