首页 > 解决方案 > 如何查询自上次查询以来的所有新文档和更新文档?

问题描述

我需要查询一个集合并返回自上次查询以来新的或更新的所有文档。该集合由 分区userId。我正在寻找一个我可以使用(或创建和使用)的值,这将有助于促进此查询。我考虑过使用_ts

SELECT * FROM collection WHERE userId=[some-user-id] AND _ts > [some-value]

问题_ts在于它不够精细,查询可能会错过另一个客户端在同一秒内所做的更新。

在 SQL Server 中,我可以使用IDENTITY另一个表中的列来完成此操作。让我们打电话给桌子version。在事务中,我将在表中创建一个新行,version对另一个表进行更新(包括version使用新值更新列。要查询新行和更新行,我将使用如下查询:

SELECT * FROM table WHERE userId=[some-user-id] and version > [some-value]

我怎么能在 Cosmos DB 中做这样的事情?更改提要似乎是正确的选择,但没有查询更改提要的能力,我不确定我将如何解决这个问题。

万一重要,(Web/移动)客户端通过 Web api 连接到 Cosmos DB 中的数据。我可以控制整个堆栈——从客户端到后端。

标签: azure-cosmosdb

解决方案


这就是事务一致性级别的用途:https ://docs.microsoft.com/en-us/azure/cosmos-db/consistency-levels

选择强一致性,您的查询将始终返回最新的写入。

强:强一致性提供了线性化保证。读取保证返回项目的最新提交版本。客户端永远不会看到未提交或部分写入。始终保证用户阅读最新提交的写入。


推荐阅读