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

2024-01-02

我正在尝试查询 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 Functions Cosmos DB 输出绑定 https://learn.microsoft.com/azure/azure-functions/functions-bindings-cosmosdb#output,它使用 SQL API (用于 SQL API 的 .NET SDK https://learn.microsoft.com/en-us/azure/cosmos-db/sql-api-sdk-dotnet) 连接到帐户并存储数据。有一个note在该文件中说:

如果您正在使用,请勿使用 Azure Cosmos DB 输入或输出绑定 Cosmos DB 帐户上的 MongoDB API。数据损坏是可能的。

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

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

如果要维护 Azure Functions 管道,您可以切换到使用 Cosmos DB SQL API 帐户,或者更改输出绑定并将其替换为手动实现MongoDB 客户端 https://stackoverflow.com/questions/42045678/connecting-to-mongodb-from-azure-function.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Cosmos Mongodb 查询失败,但 azure 存储资源管理器工作正常? 的相关文章

随机推荐