C# Azure Cosmos DB:按GUID检索文档
我在Cosmos DB容器中存储了一个GUID为的文档。但是,当我尝试使用C# Azure Cosmos DB:按GUID检索文档,c#,azure,azure-cosmosdb,C#,Azure,Azure Cosmosdb,我在Cosmos DB容器中存储了一个GUID为的文档。但是,当我尝试使用Where()子句检索同一文档时,它无法返回该文档 这是我查询文档的C#代码: var应用程序=等待客户端 .CreateDocumentQuery(collectionLink、feedOptions) 其中(d=>d.Id==“b0e6b18a-54rgf-497d-45g7-bcb17afbdtyh”) .其中(d=>d.类型==“应用程序”) .Where(d=>d.DeletedDateTime==null) .
Where()
子句检索同一文档时,它无法返回该文档
这是我查询文档的C#代码:
var应用程序=等待客户端
.CreateDocumentQuery(collectionLink、feedOptions)
其中(d=>d.Id==“b0e6b18a-54rgf-497d-45g7-bcb17afbdtyh”)
.其中(d=>d.类型==“应用程序”)
.Where(d=>d.DeletedDateTime==null)
.AsDocumentQuery()
.ExecuteExtAsync(cancellationToken)
.配置等待(错误);
下面是Azure Cosmos数据库中的Json文件示例:
{
"id": "b0e6b18a-54rgf-497d-45g7-bcb17afbdtyh",
"Type": "application",
"ApplicationId": "b0e6b18a-54rgf-497d-45g7-bcb17afbdtyh",
"Name": "test",
"Description": "test application.",
"Company": "test",
"OwnerEmailId": "xyz@xyz.com",
"CreatedDateTime": "",
"ModifiedDateTime": "",
"DeletedDateTime": null,
"Resources": [],
"_rid": "removedId",
"_self": "removedId",
"_etag": "removedID",
"_attachments": "attachments/",
"_ts": 1567604515
}
在最终输出中,没有匹配的记录。少了什么
重要此代码在我的开发环境中工作。但它在测试环境中失败了
我想这是因为您的查询引用了“Id”,而记录具有字段名“Id”。。。检查是否区分大小写,即使用“d.id”而不是“d.id”。在SQL数据库中,这会引发错误,但CosmosDB不是关系型的,因此如果查询中没有字段,它只返回一个空记录集。让我知道这是否解决了问题。当我在dev环境中交叉检查时,感谢您的回复。可以看出它适用于不区分大小写的环境,因此我认为您设置两个CosmosDB环境的方式有所不同-检查是否有参数打开或关闭区分大小写。所以这可以解释为什么它在DEV中工作而在测试中不工作。作为一个好的实践,我建议您总是像环境区分大小写一样对其进行编程,这样它就会一直工作。此外,环境的设置应该是相同的,这样测试人员就能够向开发人员提供可复制的测试结果。@Matt-Cosmos DB没有关闭区分大小写的概念。通常,
Id
通过NewtonSoft映射到Id
(例如,[JsonProperty(PropertyName=“Id”)]
)。当您说它在您的开发环境中工作时,这是否意味着您的代码使用Cosmos DB emulator工作?或者您是否有多个Cosmos DB部署?或者你完全是指别的什么?请编辑以澄清。我想这是因为您的查询引用了“Id”,而记录具有字段名“Id”。。。检查是否区分大小写,即使用“d.id”而不是“d.id”。在SQL数据库中,这会引发错误,但CosmosDB不是关系型的,因此如果查询中没有字段,它只返回一个空记录集。让我知道这是否解决了问题。当我在dev环境中交叉检查时,感谢您的回复。可以看出它适用于不区分大小写的环境,因此我认为您设置两个CosmosDB环境的方式有所不同-检查是否有参数打开或关闭区分大小写。所以这可以解释为什么它在DEV中工作而在测试中不工作。作为一个好的实践,我建议您总是像环境区分大小写一样对其进行编程,这样它就会一直工作。此外,环境的设置应该是相同的,这样测试人员就能够向开发人员提供可复制的测试结果。@Matt-Cosmos DB没有关闭区分大小写的概念。通常,Id
通过NewtonSoft映射到Id
(例如,[JsonProperty(PropertyName=“Id”)]
)。当您说它在您的开发环境中工作时,这是否意味着您的代码使用Cosmos DB emulator工作?或者您是否有多个Cosmos DB部署?或者你完全是指别的什么?请编辑以澄清。