如何实现等价于指定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
相关产品推荐
相关产品推荐

