$ multiply仅支持数字类型,而不支持数组

时间:2017-02-22 12:13:58

标签: javascript mongodb mongodb-query aggregation-framework

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

1 个答案:

答案 0 :(得分:0)

如果要确保仅将某种数据类型的数据输入到结果集中(例如在聚合查询中),可以将以下过滤器添加到匹配项:

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