根据 Azure Cosmos DB 中文档的 属性 获取最新文档

Get the latest document based on a document's property in Azure Cosmos DB

假设我有一个带有 SQL API 的 Cosmos DB collection,其中包含人们发送的消息列表,这些消息给出了他们当前的心情和时间戳消息已收到。人们可以随时发送消息。

在我的 collection 中,我有一些看起来像这样的东西:

[
    {
      "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"
    }
]

我想发送一个查询,以获取所有发送消息的用户的"current"心情(所有人收到的最新消息)。

通过结合 TOP 1 和 ORDER BY

,对于每个特定用户来说相对容易
SELECT TOP 1 *
FROM C
WHERE C.PersonName = "John"
ORDER BY C.TimeStamp

但我想遍历我的所有用户,运行 对每个用户的查询可能会非常浪费资源并很快变得昂贵,但我找不到可行的方法。

请注意,我很快就会有很多人会发送很多消息。

常见的模式是有两个 collections,一个为 (user, timestamp -> mood) 存储文档,然后下游处理器使用 Azure Functions or the Change feed API 直接计算 (user -> 最近心情)

[心情时间序列Collection] ==> Lambda ==> [最新心情Collection]

而最新的心情 Collection 对于上面的数据流将看起来像这样。然后您将其用于查找(现在是键查找​​)。

{
  "PersonName": "Jim",
  "LatestMood": "Happy",
  "LatestTimeStamp": "2012-05-23T17:25:43.511Z",
  "id": "6feb7b41-4b85-164e-dcd4-4e078872c5e2"
},
{
  "PersonName": "John",
  "LatestMood": "Moody",
  "LatestTimeStamp": "2012-05-23T18:25:43.511Z",
  "id": "b021a4a5-ee92-282c-0fe0-b5d6c27019af"
},
{
  "PersonName": "Don",
  "LatestMood": "Sad",
  "LatestTimeStamp": "2012-03-23T18:25:43.511Z",
  "id": "ee72cb36-4304-06e5-ed7c-1d0ff890de48"
}