You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何添加createdAt.between后DataStore.observeQuery不触发INSERT事件?

AWS Amplify DataStore.observeQuery 无法触发INSERT事件问题排查与解决

问题场景

使用aws-amplify v5.3.3版本时,给DataStore.observeQuery添加createdAt.between查询过滤器后,新数据插入DynamoDB时无法触发订阅函数。

代码示例

const subscription = DataStore.observeQuery(Order, (order) =>
  order.and((order) => [
    order.createdAt.between(start, end), // 添加该过滤器后,新数据插入时不会触发观察者
    order.orderRestaurantId.eq(restaurant?.id),
    order.or((o) => [
      o.status.eq(OrderStatus.ACCEPTED),
      o.status.eq(OrderStatus.COOKING),
      o.status.eq(OrderStatus.NEW),
      o.status.eq(OrderStatus.READY_FOR_PICKUP),
    ]),
  ])
).subscribe((snapshot) => {
  const { items, isSynced } = snapshot;
  console.log(
    `[Snapshot] Orders fetched: ${items.length}, isSynced: ${isSynced}`
  );
})

额外现象

移除createdAt.between过滤器后,INSERT事件依旧无法触发观察者,但UPDATE事件可以触发,且触发时不会包含新插入的数据;刷新页面后能获取到所有数据,包括新创建的条目。

解决方案

问题根源是之前把过滤器的时间上限(end)设为了订阅创建时的当前时间,导致订阅后新创建的条目因为createdAt晚于这个时间上限,不满足过滤条件,所以不会触发观察者。

调整时间范围,把end设置为未来足够远的时间即可解决问题,当前生效的设置如下:

const start = moment().utc().subtract(7, "day").toISOString();
const end = moment().utc().add(30, "day").toISOString();

内容的提问来源于stack exchange,提问作者BigPun86

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 19:07:00