mongodb - 多个复合键

标签 mongodb mongodb-.net-driver

这是我的实体:

{
     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 ) 因为索引不被视为“在”文档内,可以这么说。换句话说,您始终可以插入文档 list : [ {a:1, b:1}, {a:1, b:1} ],即具有包含以下内容的列表的文档:副本。这在应用程序端很容易修复,但了解一下可能会更好。

关于mongodb - 多个复合键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30419114/

相关文章:

c# - 如何在 Mongo 驱动程序中为 "orderby"编写查询以供 C# 排序?

mongodb - Query.Near 的 maxDistance 参数不起作用

javascript - Javascript foreach 异步行为问题

javascript - 在 Meteor 应用程序中将名称映射到 id

mongodb - 如何在 MongoDB 中更改文档属性

MongoDb:如何使用 C# 官方驱动程序返回选择(查找)中的不同字段

c# - MongoDB C# 驱动程序 MongoCredential 对象

mongodb - 如何将 mongodb 字段数据类型从 NumberLong 更改为 Double?

mongodb - meteor ,Mongo 查询查找每第 n 个文档

java - 有没有办法在吗啡中编写否定查询(例如nand,nor,not)