无法通过.NET mongoDB Driver创建分片集合

问题描述 投票:0回答:2

使用 MongoDB API,我们无法通过 .NET MongoDB 驱动程序创建具有自定义数据库名称的分片集合。

命令:

{"shardCollection", $"{MongoDatabase.DatabaseNamespace.DatabaseName}.{collectionName}"}
{"key", new BsonDocument {{"ShardKey1", "hashed"}}}

低于异常,

{"Command shardCollection failed: shardCollection must be run against the admin database."}

只能在名为“admin”的数据库上创建分片集合。

  1. 管理数据库在这里到底是什么意思?
  2. 为什么管理数据库不应该有自定义名称(在这种情况下,如果我们给数据库名称“admin”命令有效)?
  3. 为什么在 MongoDB API 3.6 版而不是 3.2 版中面临问题。受影响的更新是什么?
mongodb mongodb-.net-driver sharding azure-cosmosdb-mongoapi
2个回答
0
投票

cosmos db 似乎更愿意使用自定义命令。这对我有用:

var createCollectionCommand = new BsonDocument
            {
                { "customAction", "CreateCollection" },
                { "collection", collection },
                { "shardKey", shardkey }
            };
await _db.RunCommandAsync<BsonDocument>(createCollectionCommand);

0
投票

升级到.net mongodb驱动程序3.6+后出现语义已经改变了一点,试试这个:

IMongoDatabase db;

var bson = new BsonDocument
{
    { "customAction", "CreateCollection" },
    { "collection", collectionName },
    { "shardKey", partitionKey },
    { "offerThroughput", 400 },
};

var shellCommand = new BsonDocumentCommand<BsonDocument>(bson);

db = connectionSet.MongoClient.GetDatabase(cosmosDbName);

var commandResult = db.RunCommand<BsonDocument>(shellCommand);

然后,根据您是否有自动缩放功能,您可能需要指定它,请查看此处 https://learn.microsoft.com/en-us/azure/cosmos-db/mongodb/custom-commands

© www.soinside.com 2019 - 2024. All rights reserved.