我正在尝试查询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());
答案 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帐户。