从C#MongoDb启用分片

从C#MongoDb启用分片,c#,mongodb,C#,Mongodb,我正在使用Mongo4和最新的C#驱动程序。我的应用程序动态创建DBs和集合,我希望启用分片。我正在使用以下代码: if (!ShardingEnabled) return; var database = collection.Database; var databaseName = database.DatabaseNamespace.DatabaseName; var collectionName = collection.Collection

我正在使用Mongo4和最新的C#驱动程序。我的应用程序动态创建DBs和集合,我希望启用分片。我正在使用以下代码:

if (!ShardingEnabled) return;
        var database = collection.Database;
        var databaseName = database.DatabaseNamespace.DatabaseName;
        var collectionName = collection.CollectionNamespace.CollectionName;
        var shardDbScript = $"{{ enableSharding: \"{databaseName}\" }}";
        var shardDbResult = database.RunCommand<MongoDB.Bson.BsonDocument>(new MongoDB.Bson.BsonDocument() {

            { "eval",shardDbScript }
        });
        var adminDb = Client.GetDatabase("admin");
        var shardScript = $"{{shardCollection: \"{databaseName}.{collectionName}\"}}";
        var commandDoc = new BsonDocumentCommand<MongoDB.Bson.BsonDocument>(new MongoDB.Bson.BsonDocument()
            {
                { "eval",shardScript }
            }
        );
        var response = adminDb.RunCommand(commandDoc);

如何从C#内部启用分片?

我已经找到了答案。这就是如何从c#切分数据库及其集合,请注意,切分键索引必须已经存在:

if (!ShardingEnabled) return;
        var database = collection.Database;
        var adminDb = Client.GetDatabase("admin");
        var configDb = Client.GetDatabase("config");
        //var dbs = Client.ListDatabaseNames().ToList();
        var databaseName = database.DatabaseNamespace.DatabaseName;
        var collectionName = collection.CollectionNamespace.CollectionName;
        var shardDbResult = adminDb.RunCommand<MongoDB.Bson.BsonDocument>(new MongoDB.Bson.BsonDocument() {

            { "enableSharding",$"{databaseName}" }
        });
        var shardScript = $"{{shardCollection: \"{databaseName}.{collectionName}\"}}";
        var commandDict = new Dictionary<string,object>();
        commandDict.Add("shardCollection", $"{databaseName}.{collectionName}");
        commandDict.Add("key",new Dictionary<string,object>(){{"_id","hashed"}});
        var bsonDocument = new MongoDB.Bson.BsonDocument(commandDict);
        var commandDoc = new BsonDocumentCommand<MongoDB.Bson.BsonDocument>(bsonDocument);
        var response = adminDb.RunCommand(commandDoc);
如果(!ShardingEnabled)返回;
var database=collection.database;
var adminDb=Client.GetDatabase(“admin”);
var configDb=Client.GetDatabase(“config”);
//var dbs=Client.ListDatabaseNames().ToList();
var databaseName=database.DatabaseNamespace.databaseName;
var collectionName=collection.CollectionNamespace.collectionName;
var shardDbResult=adminDb.RunCommand(新的MongoDB.Bson.BsonDocument(){
{“enableSharding”,$“{databaseName}”
});
var shardScript=$“{{shardCollection:\”{databaseName}.{collectionName}\\“}”;
var commandDict=新字典();
Add(“shardCollection”,$”{databaseName}.{collectionName}”);
Add(“key”,newdictionary(){{{{u id”,“hash”});
var bsonDocument=新的MongoDB.Bson.bsonDocument(commandDict);
var commandDoc=新的BsonDocumentCommand(bsonDocument);
var response=adminDb.RunCommand(commandDoc);