簡體   English   中英

MongoDB $ cmp(聚合)給出錯誤結果

[英]MongoDB $cmp (aggregation) giving false results

我在mongo中使用cmp聚合並使其正常工作,但我認為我遇到的問題是一個錯誤。 當我將10(或更大)與8.3進行比較時,返回-1。 當我將9.5與8.3比較時,返回1。 似乎我將十分之一或以上的任何數字與某個地方的數字進行比較,我得到-1。 如果我將一個與另一個進行比較,則效果很好。

以下是比較的部分和結果

 cmpPrice: {
                $cmp: ['$amount', '$ticker.price_usd']
              },

case "price":
                    if (doc.cmpPrice == -1 && doc.direction == "above") {
                      console.log("\t\tConditions Met, Price Above" );   
                      emailUser(doc);
                    } else if (doc.cmpPrice == 1 && doc.direction == "below") {
                      console.log("\t\tConditions Met, Price Below");
                      emailUser(doc);
                    } else {
                      console.log("\t\tFailed");
                    }
                    break;

結果

       - ID: 59766722b006792254355adb
                Amount 10
                Ticker Price 7.79818
                Conditions( price, above )
                CMP( Volume: -1, Market Cap: -1, Price: -1 )
                Conditions Met, Price Above
        - ID: 597659d5dd06792ea08037e9
                Amount 100
                Ticker Price 7.79818
                Conditions( price, below )
                CMP( Volume: -1, Market Cap: -1, Price: -1 )
                Failed
        - ID: 5976624daccd002bdce2ec6a
                Amount 9.5
                Ticker Price 7.79818
                Conditions( price, above )
                CMP( Volume: 1, Market Cap: 1, Price: 1 )
                Failed

檢查兩種類型( 金額股票行情價格 )是否都相同(數字字符串)。 請記住,$ cmp聚合運算符同時比較value和type 如果類型不匹配, 則適用BSON比較順序。

代碼的問題很可能是類型不匹配,而BSON比較規則起了作用。 我建議將“ 數量”設為一個數字,然后將“ 報價價格”轉換為一個數字。

暫無
暫無

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

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