web-dev-qa-db-fra.com

Comment créer des index dans MongoDB via .NET

J'ai créé par programme une nouvelle collection de documents à l'aide du pilote MongoDB C #.

À ce stade, je veux créer et créer des index par programme. Comment puis je faire ça?

40
Payedimaunt

À partir de la version 2.0 du pilote, il existe une nouvelle API async uniquement. L'ancienne API ne devrait plus être utilisée car elle constitue une façade de blocage sur la nouvelle API et est obsolète.

La façon actuellement recommandée de créer un index est d'appeler et d'attendre CreateOneAsync avec un IndexKeysDefinition que vous obtenez en utilisant 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));
}
62
i3arnon

vous devez utiliser CreateIndex car EnsureIndex est marqué comme obsolète pour une compatibilité future avec les prochaines versions de 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

Quelque chose comme ça devrait faire:

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

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

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

Veuillez consulter les bits suivants dans la documentation:

15
Derick

La surcharge de CreateOneAsync dans la réponse actuellement acceptée est désormais marquée comme obsolète avec le message "Utilisez CreateOneAsync avec un CreateIndexModel à la place." Voici comment procéder:

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

Il existe une zone entière sur l'indexation sous la page de documentation Définitions et constructeurs:

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

Exemple:

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

la façon la plus simple de créer des index en c # est d'utiliser la bibliothèque de wrapper de pilote MongoDB.Entities . voici un exemple de création d'un index de texte:

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

et pour effectuer une recherche plein texte, il vous suffit de:

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

je n'ai rien vu de plus simple que ça.

0
Ryan Gunner