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