Это становится немного громоздким, если вы хотите запускать строго типизированный API-драйвер .NET, такой как targetCollection.Indexes.CreateOne()
, так как он требует, чтобы параметры были определены как CreateIndexOptions
тип, который предполагает, что все параметры, такие как Sparse
или Unique
, будут указано строго типизированным способом.
В качестве альтернативы вы можете создать несколько индексов, используя команду createIndexes database. Чтобы запустить его из C #, вы можете удалить ns
из полученного BsonDocuments
, поскольку пространство имен будет другим, а затем передать все ваши определения этой команде. Попробуйте:
var sourceCollectionName = "source";
var targetCollectionName = "target";
var sourceCollection = Db.GetCollection<BsonDocument>(sourceCollectionName);
List<BsonDocument> sourceCollectionIndexes = await (await sourceCollection.Indexes.ListAsync()).ToListAsync();
foreach(var indexDef in sourceCollectionIndexes)
{
indexDef.Remove("ns");
}
await Db.RunCommandAsync<BsonDocument>(new BsonDocument()
{
{ "createIndexes", targetCollectionName },
{
"indexes", new BsonArray(sourceCollectionIndexes)
}
});