[英]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.