2017-07-24 155 views
1

我在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 
+0

愚蠢的问题,但都是数量和价格类型数量? –

+0

金额是一个字符串,并且数字是从API JSON中获取的,所以我也在猜测字符串 – rudster

+2

您可以使Number类型的“金额”再试一次吗?并检查“Ticker Price”的类型?我认为类型之间可能存在问题。 –

回答

2

检查两种类型(即金额北京时间价格的)是同一类型的(一个字符串的数字)。请记住,$ cmp汇总运算符会比较的值和的类型。如果类型不匹配,the BSON Comparison Order applies.

代码的问题很可能是类型不匹配,BSON比较规则发挥作用。我建议做金额一个数字,并转换股票价格到一个数字。