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

问题描述 投票:38回答:5

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

在这一点上我想编程方式创建和建立索引。我怎样才能做到这一点?

c# .net mongodb indexing mongodb-.net-driver
5个回答
62
投票

从司机的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));
}

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));

15
投票

像这样的东西应该做的:

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

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

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

请参阅文档中的下列位:


6
投票

在目前接受的答案CreateOneAsync的过载,现在标有消息过时“了CreateIndexModel改用CreateOneAsync。”这里是你如何做到这一点:

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);
}

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);

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");

还没有看到任何东西,使得它比简单。

© www.soinside.com 2019 - 2024. All rights reserved.