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

如何实现等价于指定SQL的Dynamoose OR条件查询?求指导

解决Dynamoose中OR条件查询的问题

你的问题出在查询条件的分组逻辑上——Dynamoose需要明确将OR条件包裹成一个单独的逻辑块,才能和主键的EQ条件正确结合。

正确的写法

你可以通过两种方式实现目标查询:

方式1:使用查询回调函数分组OR条件

// 记得加上await,因为exec()是异步操作
const employees = await EmsModel.query('pk')
  .eq('emp_prof')
  .where(function() {
    // 这里的this指向查询构建器,将两个contains条件设为OR关系
    this.where('first_name').contains(params.name)
      .or()
      .where('last_name').contains(params.name);
  })
  .exec();

方式2:使用Condition构造器

如果你更喜欢更清晰的条件分离,可以先构建OR条件的Condition对象,再传入查询:

const dynamoose = require('dynamoose'); // 确保已引入dynamoose

const nameCondition = new dynamoose.Condition()
  .where('first_name').contains(params.name)
  .or()
  .where('last_name').contains(params.name);

const employees = await EmsModel.query('pk')
  .eq('emp_prof')
  .where(nameCondition)
  .exec();

为什么你的原代码无法运行?

你原来的写法中,.and()之后直接调用.or(),会导致查询逻辑结构混乱——Dynamoose无法识别你想要将两个contains条件作为OR组,再和主键条件做AND。必须通过回调函数或Condition对象将OR条件包裹起来,才能让查询构建器正确解析逻辑关系。

另外别忘了给exec()加上await,否则你拿到的会是一个Promise对象,而不是实际的查询结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 18:23:15