我已使用MongoDB C#驱动程序编程创建了一个新的文档集合。
现在我想以编程方式创建和构建索引。我该如何做到这一点?
我已使用MongoDB C#驱动程序编程创建了一个新的文档集合。
现在我想以编程方式创建和构建索引。我该如何做到这一点?
从驱动程序的v2.0开始,有一个新的async
API。旧的API不应再使用,因为它是对新API的阻塞外观,并已弃用。
目前推荐的创建索引的方法是通过调用并等待使用Builders.IndexKeys
获得的IndexKeysDefinition
的CreateOneAsync
:
static async Task CreateIndexAsync()
{
var client = new MongoClient();
var database = client.GetDatabase("HamsterSchool");
var collection = database.GetCollection<Hamster>("Hamsters");
var indexKeysDefinition = Builders<Hamster>.IndexKeys.Ascending(hamster => hamster.Name);
await collection.Indexes.CreateOneAsync(new CreateIndexModel<Hamster>(indexKeysDefinition));
}
在未来版本的 MongoDB
中,EnsureIndex
标记为过时,建议您使用 CreateIndex
以确保向后兼容性:
var client = new MongoClient("mongodb://localhost");
var db = client.GetServer().GetDatabase("db");
var collection = db.GetCollection<Hamster>("Hamsters");
collection.CreateIndex(IndexKeys<Hamster>.Ascending(_ => _.Name));
collectionName.Indexes.CreateOne(Builders<TDocument>.IndexKeys.Ascending(doc => doc.Field));
。 - Marcello目前被接受的答案中的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);
}
可能像这样做:
var server = MongoServer.Create("mongodb://localhost");
var db = server.GetDatabase("myapp");
var users = db.GetCollection<User>("users");
users.EnsureIndex(new IndexKeysBuilder().Ascending("EmailAddress"));
IndexKeysDefinition<MyModel> keys = "{ Reference: 1 }";
var indexModel = new CreateIndexModel<MyModel>(keys);
await _context.Indexes.CreateOneAsync(indexModel);
DB.Index<Author>()
.Key(a => a.Name, Type.Text)
.Key(a => a.Surname, Type.Text)
.Create();
要进行全文搜索,只需执行以下操作:
DB.SearchText<Author>("search term");