Подтвердить что ты не робот

Как создать индексы в MongoDB через .NET.

Я программно создал новую коллекцию документов, используя драйвер MongoDB С#.

В этот момент я хочу программно создавать и создавать индексы. Как я могу это сделать?

4b9b3361

Ответ 1

Начиная с версии 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));
}

Ответ 2

вы должны использовать 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));

Ответ 3

Что-то вроде этого должно делать:

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

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

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

В документации см. следующие биты:

Ответ 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);

Ответ 5

Перегрузка 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);
}

Ответ 6

Самый простой способ создать индексы в С# - использовать библиотеку-оболочку драйвера MongoDB.Entities. Вот пример создания текстового индекса:

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

и для полнотекстового поиска вы просто делаете:

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

не видел ничего другого, что делает это проще, чем это.