MongoDB $ cmp(聚合)给出错误的结果

我正在使用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 

检查两种types( 金额代码价格 )是相同types(一个string的数量)。 请记住,$ cmp聚合运算符会比较值和types 。 如果types不匹配, 则应用BSON比较顺序。

你的代码的问题很可能是types不匹配,BSON比较规则发挥作用。 我build议将金额设为一个数字,并将“ 代价”转换为数字。