如何在Couchbase 7.0.3中提取N1QL查询的lastUpdatedTime并用于更新查询
问题分析与解决办法
你当前的更新查询失效,核心原因是子查询返回的是包含lastUpdatedTime字段的对象数组,而lastUpdatedTime IN (...)是拿数值和对象做匹配,自然无法命中。
方案1:用RAW关键字让子查询返回纯数值
在子查询的SELECT后加上RAW,直接提取字段值而非返回对象:
UPDATE `bag` SET updated = true WHERE staticBar='ABC1234511991' AND lastUpdatedTime IN ( SELECT RAW lastUpdatedTime FROM `bag` AS bs WHERE bs.staticBar='ABC1234511991' ORDER BY bs.lastUpdatedTime DESC LIMIT 1 )
方案2:用MAX()函数简化查询(更高效)
既然你要找最新的lastUpdatedTime,直接用聚合函数MAX()替代排序+LIMIT,逻辑更简洁,性能也更好:
UPDATE `bag` SET updated = true WHERE staticBar='ABC1234511991' AND lastUpdatedTime = ( SELECT MAX(bs.lastUpdatedTime) FROM `bag` AS bs WHERE bs.staticBar='ABC1234511991' )
方案3:用EXISTS子查询匹配
如果需要更灵活的匹配逻辑,可以用EXISTS判断当前文档的lastUpdatedTime是否是目标值:
UPDATE `bag` b SET updated = true WHERE b.staticBar='ABC1234511991' AND EXISTS ( SELECT 1 FROM `bag` bs WHERE bs.staticBar='ABC1234511991' ORDER BY bs.lastUpdatedTime DESC LIMIT 1 HAVING bs.lastUpdatedTime = b.lastUpdatedTime )
内容的提问来源于stack exchange,提问作者hakansander
相关产品推荐
相关产品推荐

