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

Dynamoose中如何通过scan实现数组元素多值过滤查询

Dynamoose无索引场景下多值匹配查询实现方法

你当前使用的contains操作符仅用于子串/集合元素包含匹配,无法实现多值精确匹配需求。由于name字段未创建索引,可通过以下几种Scan写法实现查询目标:

方法1:使用in操作符(最简洁)

直接指定匹配值列表,筛选name属于列表内任意值的记录,支持链式调用和对象传参两种写法:

// 链式调用写法
const result = await City.scan("name").in(["City2", "City8"]).exec();

// 对象传参写法(和你之前的contains写法风格一致)
const result = await City.scan({
  name: { in: ["City2", "City8"] }
}).exec();

方法2:使用OR条件组合

通过逻辑或拼接多个精确匹配条件,效果和in操作符完全一致:

// 链式调用写法
const result = await City.scan()
  .where("name").eq("City2")
  .or()
  .where("name").eq("City8")
  .exec();

// 对象传参写法
const result = await City.scan({
  $or: [
    { name: { eq: "City2" } },
    { name: { eq: "City8" } }
  ]
}).exec();

注意事项

  • 不要误用contains操作符:该操作符是子串匹配规则,如果你用contains: "City2"会把City20、City21、xxxCity2xxx这类包含City2子串的无关记录全部查出来,不符合精确匹配要求
  • Scan操作属于全表扫描,无索引也可正常执行,但表数据量较大时会消耗较多读容量单位,建议搭配.startAt()做分页处理,避免单次查询超时
  • 如果该多值匹配查询属于高频操作,建议给name字段创建全局二级索引,后续改用Query操作可大幅提升查询效率,降低不必要的扫描开销
  • 调用scan方法要使用你定义的模型名City,不要直接写Model.scan

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 04:18:23