Sunday, 23 April 2017

Dynogels: Query using OR comparison

I am trying to optimise the following scans into a single scan (or query). The only way I see is to use to use a OR comparator using DynamoDB. I am using dynogels (fork of vogels) in my application but sadly I am not aware of any OR query functionality in there.

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);

Proposed optimisation:

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()));

The scans get me the reservations that end (departure) or start (arrival) (or both) in a specified date range (from, to).



via btype

No comments:

Post a Comment