58

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

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

4

6 回答 6

75

从驱动程序的 v2.0 开始,有一个新的async-only API。不应再使用旧 API,因为它是新 API 的阻塞外观并且已被弃用。

当前推荐的创建索引的方法是通过调用和等待你得到CreateOneAsync的:IndexKeysDefinitionBuilders.IndexKeys

static async Task CreateIndexAsync()
{
    var client = new MongoClient();
    var database = client.GetDatabase("HamsterSchool");
    var collection = database.GetCollection<Hamster>("Hamsters");
    var indexKeysDefinition = Builders<Hamster>.IndexKeys.Ascending(hamster => hamster.Name);
    await collection.Indexes.CreateOneAsync(new CreateIndexModel<Hamster>(indexKeysDefinition));
}
于 2015-04-06T21:26:12.677 回答
46

您应该使用CreateIndexasEnsureIndex标记为过时的,以便将来与以下版本兼容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));
于 2014-03-17T11:18:55.507 回答
37

当前接受的答案中的重载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);
}
于 2019-02-02T19:03:29.267 回答
15

这样的事情应该做:

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

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

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

请参阅文档中的以下位:

于 2013-07-23T10:35:26.783 回答
4

在定义和构建器文档页面下有一个完整的索引区域:

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);
于 2018-07-09T10:53:09.223 回答
4

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

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

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

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

还没有看到比这更简单的东西。

于 2019-05-24T06:13:44.457 回答