当前位置: 首页 > 知识库问答 >
问题:

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

贺功
2023-03-14

我试图查询一个Cosmos MongoDB集合,我可以连接到它与Robo3T和3T工作室,和dotnet核心mongo客户端(在一个测试线束)。我可以对所有平台中的实体(db.[collection_name]. count({}))进行计数,但是每个查询(db.[collection_name]. search({})都会失败,并出现以下错误:

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和下面的示例查询。网络安全带。。不管我用什么,每次都是一样的错误。

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

共有1个答案

宇文育
2023-03-14

这个问题源于帐户中混合使用API。如评论中所述,您正在使用Azure函数的Cosmos DB输出绑定,该绑定使用SQL API(.NET SDK for SQL API)连接到帐户并存储数据。该文件中有一条说明:

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

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

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

如果您想要维护Azure函数管道,您可以切换到使用Cosmos DB SQL API帐户,或者更改输出绑定并用MongoDB客户端的手动实现替换它。

 类似资料:
  • 我试图完全清理资源组在Azure。 删除资源组不是选项(访问权限:参与者,而不是所有者) 做到这一点的最优雅和明显的方法(也在一些文章中描述)是使用“空”部署模板执行完整的部署: 删除SQL Server开始“...”接受“...”失败“...”开始“...”接受“...”失败“... 你想到主意了。 其他时候效果很好。 您将得到数据库删除的无限循环“开始..接受..失败..开始..接受..失败.

  • 最近我开始创建一个新的资源组,但它似乎被困在配置服务器场资源上。重新启动部署会输出以下错误: 我没有时间等待它的到期。有没有办法取消Azure ARM部署?

  • 我需要编写一个 azure 函数来压缩在 azure blob 存储中上传的任何文件。 使用此连接字符串 它抛出以下错误 它与Azure存储帐户连接字符串配合良好。我在本地仿真器中遗漏了什么?

  • 使用Nexus Repository Manager 3. x Server连接Nexus 3。但是测试连接失败并出现以下错误。 Nexus存储库管理器3.x连接失败

  • 问题内容: 我在主软件包的一个目录下有一些文件: main.go config.go server.go 当我这样做时:“执行构建”程序将完美构建并运行良好。当我这样做时:“ go run main.go”失败了。 输出: 未定义的符号是结构,并且大写,因此应将其导出。 我的Go版本:go1.1.2 linux / amd64 问题答案: 这应该工作 Go run需要一个文件或多个文件,并且它仅合