如何通过.NET在MongoDB中创建索引

时间:2013-07-23 10:28:02

标签: c# .net mongodb indexing mongodb-.net-driver

我使用MongoDB C#驱动程序以编程方式创建了一个新的文档集合。

此时我想以编程方式创建和构建索引。我怎么能这样做?

6 个答案:

答案 0 :(得分:60)

从驱动程序的v2.0开始,只有一个新的async API。不应再使用旧的API,因为它是新API的阻止外观,不推荐使用。

目前推荐的创建索引的方法是使用CreateOneAsync调用并等待IndexKeysDefinition Builders.IndexKeys

static async Task CreateIndex()
{
    var client = new MongoClient();
    var database = client.GetDatabase("HamsterSchool");
    var collection = database.GetCollection<Hamster>("Hamsters");
    await collection.Indexes.CreateOneAsync(Builders<Hamster>.IndexKeys.Ascending(_ => _.Name));
}

答案 1 :(得分:44)

您应该使用CreateIndex,因为EnsureIndex已被标记为过时,以便将来与MongoDB的下一版本兼容:

var client = new MongoClient("mongodb://localhost");
var db = client.GetServer().GetDatabase("db");
var collection = db.GetCollection<Hamster>("Hamsters");

collection.CreateIndex(IndexKeys<Hamster>.Ascending(_ => _.Name));

答案 2 :(得分:15)

这样的事情应该做:

var server = MongoServer.Create("mongodb://localhost");
var db = server.GetDatabase("myapp");

var users = db.GetCollection<User>("users");

users.EnsureIndex(new IndexKeysBuilder().Ascending("EmailAddress"));

请参阅文档中的以下位:

答案 3 :(得分:5)

当前接受的答案中CreateOneAsync的重载现在已标记为“已过时”,并显示消息“改为将CreateOneAsync与CreateIndexModel一起使用”。操作方法如下:

static async Task CreateIndex(string connectionString)
{
    var client = new MongoClient(connectionString);
    var database = client.GetDatabase("HamsterSchool");
    var collection = database.GetCollection<Hamster>("Hamsters");
    var indexOptions = new CreateIndexOptions();
    var indexKeys = Builders<Hamster>.IndexKeys.Ascending(hamster => hamster.Name);
    var indexModel = new CreateIndexModel<Hamster>(indexKeys, indexOptions);
    await collection.Indexes.CreateOneAsync(indexModel);
}

答案 4 :(得分:3)

“定义和构建器”文档页面下的“索引编制”一整个区域:

http://mongodb.github.io/mongo-csharp-driver/2.4/reference/driver/definitions/#index-keys

示例:

IndexKeysDefinition<MyModel> keys = "{ Reference: 1 }";
var indexModel = new CreateIndexModel<MyModel>(keys);
await _context.Indexes.CreateOneAsync(indexModel);

答案 5 :(得分:0)

在c#中创建索引的最简单方法是使用驱动程序包装器库MongoDB.Entities。这是创建文本索引的示例:

    DB.Index<Author>()
      .Key(a => a.Name, Type.Text)
      .Key(a => a.Surname, Type.Text)
      .Create();

要进行全文搜索,只需执行以下操作:

    DB.SearchText<Author>("search term");

没有其他比这更简单的事情了。