首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dynogels:使用或比较的查询

Dynogels:使用或比较的查询
EN

Stack Overflow用户
提问于 2017-04-23 11:38:26
回答 1查看 995关注 0票数 1

我正在尝试将下面的scans优化为单个scan (或query)。我看到的唯一方法就是使用 comparator using DynamoDB。我在我的应用程序中使用dynogels (vogels的叉),但遗憾的是,我不知道其中有任何OR查询功能。

代码语言:javascript
复制
let arrivals = yield Reservation.scan()
  .where('room').equals(room)
  .where('arrival').between(from, to)
  .execAsync().then((reply) => reply.Items.map((item) => item.get()));

let departures = yield Reservation.scan()
  .where('room').equals(room)
  .where('departure').between(from, to)
  .execAsync().then((reply) => reply.Items.map((item) => item.get()));

let combined = arrivals.concat(departures);
return Promise.resolve(combined);

拟议的优化:

代码语言:javascript
复制
return Reservation.scan()
  .where('room').equals(room)
  .where('arrival').between(from, to)
  .or.where('departure').between(from, to)
  .execAsync().then((reply) => reply.Items.map((item) => item.get()));

扫描可以获得指定日期范围(departureto)中的end (from )或start (arrival) (或两者都)的保留。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-24 13:28:45

我认为可以使用filterexpression来实现这一点。

使用过滤器表达式的示例代码:-

代码语言:javascript
复制
const scanItem = Reservation.scan().filterExpression('room = :idVal AND ((arrival BETWEEN :arrDateVal1 AND :arrDateVal2) OR (departure BETWEEN :depDateVal1 AND :depDateVal2)) ')
                .expressionAttributeValues({ ':idVal' : '2', ':arrDateVal1' : '21-APR-2017', ':arrDateVal2' : '23-APR-2017'
            ,':depDateVal1' : '21-APR-2017', ':depDateVal2' : '23-APR-2017'});                

scanItem.exec((err, result) => {if(!err) {console.log(JSON.stringify(result,undefined, 2))}});

注:-

不确定您是否希望专门使用where而不是filterexpression (或)只想实现结果,而不管是where还是filterexpression

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43570660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档