【发布时间】:2022-03-03 15:38:39
【问题描述】:
基本上它只是基于机器 id 和日期时间在 azure cosmos db 中查询获取操作。 我真的坚持基于日期时间在 cosmos 中进行查询。我能够运行相同的查询并在 azure 门户上获得结果。但是在代码方面我没有得到结果。
更多细节:
SELECT *
FROM c
WHERE c.IoTHub.ConnectionDeviceId IN ('hub20') AND c.MACHINE_ID = 'TAP_20' AND (c.EventEnqueuedUtcTime >= '2021-02-03T10:40:42.5180000Z' AND c.EventEnqueuedUtcTime <= '2021-02-03T10:40:42.5180000Z')
QueryDefinition queryDefinition = new QueryDefinition(sqlQueryText);
FeedIterator<dynamic> queryResultSetIterator = container.GetItemQueryIterator<dynamic>(queryDefinition);
FeedResponse<dynamic> currentResultSet;
while (queryResultSetIterator.HasMoreResults)
{
currentResultSet = await queryResultSetIterator.ReadNextAsync();
}
我可以在 MACHINE_ID 之前获取所有数据,但只要我应用 c.EventEnqueuedUtcTime 条件。我无法获取数据。我尝试了所有可能的 solution.c.EventEnqueuedUtcTime 值,我们将其作为字符串获取,并且在数据库中它被保存为字符串,如图所示。
{
"MESSAGE_GROUP_ID": "24c9e3ad-4fd6-4abb-88d8-eafb9060884e",
"TYPE": "Gauges",
"MACHINE_ID": "TAP_20",
"Gauges": {
"OVERRIDE": 85.8
},
"EventProcessedUtcTime": "2021-02-03T10:41:48.0493615Z",
"PartitionId": 3,
"EventEnqueuedUtcTime": "2021-02-03T10:40:42.5180000Z",
"IoTHub": {
"MessageId": "498b7df3-55e6-4b3f-a18e-698fd991e526",
"CorrelationId": null,
"ConnectionDeviceId": "hub20",
"ConnectionDeviceGenerationId": "637332663098221999",
"EnqueuedTime": "2021-02-03T10:41:11.2570000Z"
},
"id": "498b7df3-55e6-4b3f-a18e-698fd991e526"
}
任何线索将不胜感激。 谢谢
【问题讨论】:
-
我注意到两件事:1)查询中的 From 和 to 日期/时间值相同,因此您正在寻找
EventEnqueuedUtcTime值等于2021-02-03T10:40:42.5180000Z和 2)的记录在数据屏幕截图中,数据库中的值超出了您要搜索的日期/时间值。 -
1.是的,你说得对,我现在正在寻找一个价值。 2.第二点不清楚,你说的数据库在外面是什么意思。EventEnqueuedUtcTime 我要找的是保存为日期时间的默认格式为字符串。
-
请编辑您的问题,为您的文档示例添加格式正确的文本,而不是文本图像。这个meta post 列出了为什么这非常重要的许多原因。
-
我已经编辑了问题并添加了文本。我不确定为什么它不工作,但是如果查询到机器,只要我包含 EventEnqueuedUtcTime,我的查询就可以正常工作,它不会给出结果。意味着我的计数变为 0 实际上我应该得到 1 个结果。
-
查询中的值为
2021-02-03T10:40:42.5180000Z,但数据库中的值为2021-02-03T10:41:11.3190000Z。
标签: c# datetime azure-cosmosdb azure-cosmosdb-sqlapi