简体   繁体   English

从 C# MongoDb 启用分片

[英]Enable sharding from C# MongoDb

I'm using Mongo 4 with the latest C# driver.我正在使用带有最新 C# 驱动程序的 Mongo 4。 My application creates DBs and Collections on the fly and I want to enable sharding.我的应用程序动态创建 DB 和 Collections,我想启用分片。 I'm using the following code:我正在使用以下代码:

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);

I get an 'ok' response back from mongo, but my dbs arent sharded.我从 mongo 得到一个“好的”响应,但我的数据库没有分片。 Output from sh.status() Output 来自 sh.status()

{  
    "_id" : "uat_Test_0",  
    "primary" : "SynoviaShard2",  
    "partitioned" : false,  
    "version" : { 
        "uuid" : UUID("69576c3b-817c-4853-bb02-ea0a8e9813a4"),  
        "lastMod" : 1 
    }
}

How can I enable sharding from within C#?如何从 C# 中启用分片?

I figured it out.我想到了。 This is how you shard a database and its collections from c#, note, that the sharding key index must already exist:这就是你如何从 c# 分片数据库及其 collections,注意,分片键索引必须已经存在:

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);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM