簡體   English   中英

Mongoose Query Builder .or 不返回預期結果

[英]Mongoose Query Builder .or not returning expected results

語境
我正在構建一個查詢,用戶可以在其中輸入一系列日期來搜索“播放器”文檔。 查詢應返回開始和結束日期與查詢日期重疊的所有玩家。 我通過使用 OR 條件來做到這一點,其中玩家的結束日期在查詢的開始日期之后,或者玩家的開始日期在查詢的結束日期之前。 查詢中的兩個日期都是可選的,允許用戶僅指定結束日期或開始日期,或者兩者都不返回所有相關文檔。

問題
當僅指定兩個查詢日期之一時,該查詢有效(請參見下面的屏幕截圖)。 但是,如果指定了兩個日期(功能上忽略兩個查詢參數),它將返回所有文檔。

代碼

let query = Player.find({'casino': user.casino});
let queryArray = [];
if(req.body.startDate) {
        queryArray.push({playerEndDtm: {$gt: moment(req.body.startDate).toDate()}});
}
if(req.body.endDate) {
    queryArray.push({playerStartDtm: {$lt: moment(req.body.endDate).endOf('day').toDate()}});
}
if(queryArray.length > 0) {
    query.or(queryArray);
}

截圖
當指定了兩個查詢日期時: 在此處輸入圖片說明
結果:
在此處輸入圖片說明

當僅指定 1 個查詢日期時: 在此處輸入圖片說明
結果:
在此處輸入圖片說明

誰能幫我確定我做錯了什么? 謝謝!

if(req.body.endDate) {
    queryArray.push({playerStartDtm: {$lt: 
    moment(req.body.endDate).endOf('day').toDate()}});
}

在上面的查詢中,您只是檢查少於結束日期。 您需要檢查日期之間的范圍:

 ({ playerStartDtm : { $gt :  expression, $lt : expression}})

暫無
暫無

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

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