【问题标题】:$multiply only supports numeric types, not array$multiply 只支持数值类型,不支持数组
【发布时间】:2017-07-12 11:36:10
【问题描述】:

我正在尝试在 MongoDB 中使用 $multiply 运算符。

第 1 步

 db.message1064sd_00011_3744.aggregate([
    {$project : {
        "prices.00026" : 1,
         priceReal : {  
             price : "$prices.00026",
         }
    }},
    { $match : { "priceReal.price" : {$gt : 30 } } },
    { $limit : 1 }

])

我正在得到结果

 {
"result" : [ 
    {
        "_id" : "54884_00011_001",
        "prices" : {
            "00026" : 34.43
        },
        "priceReal" : {
            "price" : 34.43
        }
    }
],
"ok" : 1
}

第 2 步

但是,当我使用$multiply 时,我得到了

$multiply只支持数值类型,不支持数组

db.message1064sd_00011_3744.aggregate([

    {$project : {
        "prices.00026" : 1,
         priceReal : {  
             price : { $multiply : ["$prices.00026", 1 ] },
         }
    }},
    { $match : { "priceReal.price" : {$gt : 30 } } },
    { $limit : 1 }
])

帮帮我

我可以从 db.message1064sd_00011_3744.findOne() 获得的示例文档

{
"_id" : "25906_00011_001",
"Message_ID" : 25906,
"Subdivision_ID" : 3747,
"Sub_Class_ID" : 6300,
"Checked" : 1,
"Nomencl_ID" : "10000014597",
"manufacturer_ID" : "П1170",
"disableIfZero" : 0,
"Discontinued" : 0,
"New" : 0,
"Nomencl_Group_ID" : 28,
"Nalichie" : "Мало",
"sort" : 99,
"Warehouse_ID" : "00011",
"ParentWarehouse_ID" : "00011",
"Kachestvo" : "001",
"Svobod_Nalichie" : "10",
"Svobod_sort" : 10,
"character" : [],
"prices" : {
    "00014" : 1.51,
    "00015" : 1.45,
    "00016" : 1.41,
    "00017" : 1.38,
    "00018" : 1.35,
    "00019" : 1.33,
    "00021" : 1.31,
    "00022" : 1.29,
    "00023" : 1.28,
    "00024" : 1.27,
    "00025" : 1.25,
    "00026" : 1.24
},
"price" : {
    "Curr_ID" : 840,
    "ChangePriceTime" : "2017-01-22 19:18:21",
    "PriceUpDown" : "up",
    "callPrice" : 0,
    "Price_Value_RODP" : 1.24,
    "Price_Value_RUR" : 72.04000000000001
},
"sName" : "чип epson m2300{m2400{mx20 8k (elp, китай)",
"sNomencl_ID" : "10000014597",
"sNomencl_Articul_Proizvod" : "elp-ch-e2300-8k",
"sItemID" : "elp-ch-e2300-8k",
"EnglishName" : "cZ277",
"begin_vl" : 121,
"Hidden_URL" : "/netshop/cZ079/cZ270/cZ277/",
"Checked_Subdivision" : 1
}

【问题讨论】:

  • 我认为您的查询不会给您该错误。是否还有更多未发布的代码?
  • 您使用的是哪个版本的 MongoDB 服务器(即 db.version(),如 mongo shell 中报告的那样)?我没有收到您的文档和示例聚合的错误,尽管会注意到您当前的示例文档不会导致任何输出,因为 $match 阶段:{ "priceReal.price" : {$gt : 30 } } $prices.00026 的值只有 1.24) .我怀疑您的文件有问题,与您提供的样本不同。
  • 这是所有代码。我很惊讶,我觉得这个bug MongoDB 还是我做的不知道
  • 谢谢大家。问题解决了。一个文档是一个空白的“价格”,MongoDB,并将其解释为一个数组。建立条件,一切正常

标签: javascript mongodb mongodb-query aggregation-framework


【解决方案1】:

如果您想确保只有来自特定数据类型的数据进入您的结果集,例如在聚合查询中,您可以将以下过滤器添加到匹配项中:

{$match: { 
     // ... your query
     , "priceReal.price": { $type : "double" } 
} 

【讨论】:

    猜你喜欢
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 2018-04-02
    • 1970-01-01
    相关资源
    最近更新 更多