【发布时间】:2021-07-31 22:27:43
【问题描述】:
假设我有一个带有 SQL API 的 Cosmos DB 集合,其中包含人们发送的消息列表,这些消息给出了他们当前的心情以及收到消息的时间戳。人们可以随时发送消息。
在我的收藏中,我有一些看起来像这样的东西:
[
{
"PersonName": "John",
"CurrentMood": "Moody",
"TimeStamp": "2012-04-23T18:25:43.511Z",
"id": "25123829-1745-0a09-5436-9cf8bdcc95e3"
},
{
"PersonName": "Jim",
"CurrentMood": "Happy",
"TimeStamp": "2012-05-23T17:25:43.511Z",
"id": "6feb7b41-4b85-164e-dcd4-4e078872c5e2"
},
{
"PersonName": "John",
"CurrentMood": "Moody",
"TimeStamp": "2012-05-23T18:25:43.511Z",
"id": "b021a4a5-ee92-282c-0fe0-b5d6c27019af"
},
{
"PersonName": "Don",
"CurrentMood": "Sad",
"TimeStamp": "2012-03-23T18:25:43.511Z",
"id": "ee72cb36-4304-06e5-ed7c-1d0ff890de48"
}
]
我想发送一个查询,获取所有发送消息的用户的“当前”心情(所有人收到的最新消息)。
通过将 TOP 1 和 ORDER BY 结合起来,对每个特定用户来说都相对容易
SELECT TOP 1 *
FROM C
WHERE C.PersonName = "John"
ORDER BY C.TimeStamp
但我觉得遍历所有用户并为每个用户运行查询可能会非常浪费资源并且很快变得昂贵,但我找不到可行的方法。
请注意,我很快就会有很多人会发送很多消息。
【问题讨论】:
-
鉴于您当前的模型,我看不出您是如何轻松辨别的。
-
什么是更好的模型?
标签: azure-cosmosdb greatest-n-per-group document-database