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

时间:2017-07-24 21:35:47

标签: javascript node.js mongodb mongodb-query

我在mongo中使用cmp聚合并使其工作,但我认为我遇到的问题是一个错误。当我比较10(或更高)到8.3时,返回-1。当我比较9.5到8.3时,返回1。似乎我将十分之一或更高的任何数字与一个地方的数字进行比较得到-1。如果我比较一个和它的工作正常。

以下是比较的部分和结果

folder/authenticate_to_userpage_db.php

结果

 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;

1 个答案:

答案 0 :(得分:2)

检查两种类型(金额 Ticker价格)是否属于同一类型(字符串数)。请记住,$ cmp聚合运算符会比较值和类型。如果类型不匹配,请the BSON Comparison Order applies.

您的代码问题很可能是类型不匹配,BSON比较规则发挥作用。我建议将金额设为一个数字,并将 Ticker Price 转换为数字。