C# Azure 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) .

我在Cosmos DB容器中存储了一个GUID为的文档。但是,当我尝试使用
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部署?或者你完全是指别的什么?请编辑以澄清。