Я программно создал новую коллекцию документов, используя драйвер MongoDB С#.
В этот момент я хочу программно создавать и создавать индексы. Как я могу это сделать?
Я программно создал новую коллекцию документов, используя драйвер MongoDB С#.
В этот момент я хочу программно создавать и создавать индексы. Как я могу это сделать?
Начиная с версии 2.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));
}
вы должны использовать 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));
Что-то вроде этого должно делать:
var server = MongoServer.Create("mongodb://localhost");
var db = server.GetDatabase("myapp");
var users = db.GetCollection<User>("users");
users.EnsureIndex(new IndexKeysBuilder().Ascending("EmailAddress"));
В документации см. следующие биты:
Целая область индексирования находится на странице документации "Определения и компоновщики":
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);
Перегрузка 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);
}
Самый простой способ создать индексы в С# - использовать библиотеку-оболочку драйвера MongoDB.Entities. Вот пример создания текстового индекса:
DB.Index<Author>()
.Key(a => a.Name, Type.Text)
.Key(a => a.Surname, Type.Text)
.Create();
и для полнотекстового поиска вы просто делаете:
DB.SearchText<Author>("search term");
не видел ничего другого, что делает это проще, чем это.