簡體   English   中英

Dynogels:使用OR比較查詢

[英]Dynogels: Query using OR comparison

我正在嘗試將以下scans優化為單個scan (或query )。 我看到的唯一方法是使用DynamoDB使用OR比較器 我在我的應用程序中使用dynogelsvogels ),但遺憾的是我不知道任何OR查詢功能。

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

建議的優化:

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

掃描得到我在指定日期范圍( fromto )結束( departure )或開始( arrival )(或兩者)的預訂。

我認為這可以通過filterexpression來實現。

使用filterexpression的示例代碼: -

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 (或)只是想實現結果,無論在wherefilterexpression

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM