我编程方式创建使用MongoDB的C#驱动程序的新文档集合。
在这一点上我想编程方式创建和建立索引。我怎样才能做到这一点?
从司机的V2.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"));
请参阅文档中的下列位:
在目前接受的答案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);
}
上有定义和建设者文档页面的索引下的整个区域:
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);
以C#创建索引的最简单的方法是使用驱动器封套库MongoDB.Entities。以下是创建一个文本索引的例子:
DB.Index<Author>()
.Key(a => a.Name, Type.Text)
.Key(a => a.Surname, Type.Text)
.Create();
并做了全文搜索,你只需要做:
DB.SearchText<Author>("search term");
还没有看到任何东西,使得它比简单。