繁体   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