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?
À 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));
}
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));
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:
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);
}
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);
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.