azure-cosmosdb - Cosmos Mongodb 查询失败但 azure 存储资源管理器工作正常?

标签 azure-cosmosdb

我正在尝试查询 Cosmos MongoDB 集合,我可以使用 Robo3T 和 3T Studio 以及 dotnet core mongo 客户端(在测试工具中)很好地连接到它。我可以在所有平台上对实体 (db.[collection_name].count({})) 进行计数,但是每个查询 (db.[collection_name].find({}) 都会失败并出现以下错误:

Error: error: {
"_t" : "OKMongoResponse",
"ok" : 0,
"code" : 1,
"errmsg" : "Unknown server error occurred when processing this request.",
"$err" : "Unknown server error occurred when processing this request."}

这是我来自 Rob3T 的示例查询,下面是示例 .NET 工具。无论我使用什么,每次都出现相同的错误。

db.wihistory.find({})

和 dotnet 核心代码:

string connectionString = @"my connections string here";
        MongoClientSettings settings = MongoClientSettings.FromUrl(
            new MongoUrl(connectionString)
        );
        settings.SslSettings = 
        new SslSettings() { EnabledSslProtocols = SslProtocols.Tls12 };
        var mongoClient = new MongoClient(settings);
        var database = mongoClient.GetDatabase("vstsagileanalytics");
        var collection = database.GetCollection<dynamic>("wihistory");
        var data = collection.Find(new BsonDocument()).ToList();
        System.Console.WriteLine(data.ToString());

最佳答案

问题来自帐户中混合使用 API。如评论中所述,您正在使用 Azure Function's Cosmos DB Output binding ,它使用 SQL API ( .NET SDK for SQL API ) 连接到帐户并存储数据。该文档中有一个注释:

Don't use Azure Cosmos DB input or output bindings if you're using MongoDB API on a Cosmos DB account. Data corruption is possible.

通过此方法存储的文档不会强制执行 MongoDB 客户端会执行的某些 MongoDB 要求(例如存在“_id”标识符)(如果不存在,MongoDB 客户端将自动创建“_id”)。

Robo3T 和其他 Mongo 客户端(包括 Azure 门户)无法将存储的文档正确解析和读取为有效的 MongoDB 文档(由于缺少“_id”等要求),这就是错误的原因。

如果您想维护 Azure Functions 管道,您可以切换到使用 Cosmos DB SQL API 帐户,或者更改输出绑定(bind)并将其替换为 MongoDB client 的手动实现。

关于azure-cosmosdb - Cosmos Mongodb 查询失败但 azure 存储资源管理器工作正常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48388377/

相关文章:

mysql - 如何编写 documentdb 查询以从具有多个 id 的集合中获取数据?

azure cosmosdb非常昂贵

database - CosmosDB 中 GROUP BY 的索引

c# - Entity Framework Core 的 Cosmos 提供程序使用 DbContext 类名称创建容器

azure - 如何在 Azure Cosmos DB 中导入图形数据库的数据?

mongodb - 从 Azure MongoDB 导出集合

javascript - 如何在版本 ^3 上使用 gremlin 启动与 Cosmos DB 图形数据库的新连接

c# - 如何从excel导入documentDB中的批量数据?

azure - Azure Cosmos DB 多模型意味着什么?

c# - Gremlin,如何获取帖子和所有评论以及评论上的嵌套评论,有点像 reddit。在 C# 中