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

时间:2018-01-22 18:50:32

标签: azure-cosmosdb

我正在尝试查询Cosmos MongoDB集合,我可以使用Robo3T和3T Studio以及dotnet核心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());

1 个答案:

答案 0 :(得分:3)

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

  

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

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

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

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

相关问题