web-dev-qa-db-ja.com

.NET経由でMongoDBにインデックスを作成する方法

MongoDB C#ドライバーを使用して、プログラムで新しいドキュメントコレクションを作成しました。

この時点で、プログラムでインデックスを作成および構築します。どうやってやるの?

40
Payedimaunt

V2.0以降のドライバーには、新しいasync- only APIがあります。古いAPIは、新しいAPIに対するブロックファサードであり、非推奨であるため、使用しないでください。

現在推奨されているインデックスの作成方法は、Builders.IndexKeysを使用して取得するCreateOneAsyncIndexKeysDefinitionを呼び出して待機することです。

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

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

このようなことを行う必要があります:

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

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

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

ドキュメントの次のビットを参照してください。

15
Derick

現在受け入れられている回答の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);
}
6
Stephen Kennedy

Definitions and Buildersのドキュメントページの下に、インデックス作成に関する領域全体があります。

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

c#でインデックスを作成する最も簡単な方法は、ドライバーラッパーライブラリ MongoDB.Entities を使用することです。テキストインデックスを作成する例を次に示します。

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

全文検索を行うには、次のようにします。

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

それよりも簡単にするものは他にありません。

0
Ryan Gunner