MongoDB上嵌套字段的乘法

时间:2015-12-27 16:18:28

标签: mongodb aggregation-framework multiplying

在MongoDB的数据库中,我试图按日期对一些数据进行分组(一年中每天的一组),然后添加一个额外的字段,该字段将是两个已存在的字段相乘的结果

数据结构是:

list.files(pattern="2 2 _")->ww
library(gtools)
mixedsort(ww)->ww

我首先尝试使用{ "_id" : ObjectId("567a7c6d9da4bc18967a3947"), "units" : 3.0, "price" : 50.0, "name" : "Name goes here", "datetime" : ISODate("2015-12-23T10:50:21.560+0000") } 然后使用$project这样的

进行两阶段方法
$group

在这种情况下,第一步(db.things.aggregate( [ { $project: { "_id" : 1, "name" : 1, "units" : 1, "price" : 1, "datetime":1, "unitsprice" : { $multiply: [ "$price", "$units" ] } } }, { $group: { "_id" : { "day" : { "$dayOfMonth" : "$datetime" }, "month" : { "$month" : "$datetime" }, "year" : { "$year" : "$datetime" } }, "things" : { "$push" : "$$ROOT" } } } ], ) )给出预期输出(具有单位价格的预期值),但是当执行第二步$project时,它会输出此错误:< / p>

  

“errmsg”:$ multiply只支持数字类型,而不支持String“,   “代码”:16555

我还试图扭转局面,首先执行$group步骤,然后执行$group

$project

但在这种情况下,乘法的结果是:db.things.aggregate( [ { $group: { "_id" : { "day" : { "$dayOfMonth" : "$datetime" }, "month" : { "$month" : "$datetime" }, "year" : { "$year" : "$datetime" } }, "things" : { "$push" : "$$ROOT" } } }, { $project: { "_id" : 1, "things":{ "name" : 1, "units" : 1, "price" : 1, "datetime":1, "unitsprice" : { $multiply: [ "$price", "$units" ] } } } } ], );

有没有办法进行这种乘法?此外,以输出不具有嵌套字段的方式执行它会很好,所以它看起来像:

unitsprice:null

提前致谢

PS:我正在运行MongoDB 3.2

1 个答案:

答案 0 :(得分:0)

终于找到了错误。导入其中一个字段时,会将一些 db.execSQL("CREATE TABLE IF NOT EXISTS " + YOUR_TABLE_NAME + ... 字段创建为price。令人惊讶的是,在string步骤中首次执行multiplication时输出错误(输出正常直到它到达第一个错误字段,然后停止),但是在执行project步骤。 为了找到我使用此查询的文本字段:

  

db.things.find({price:{$ type:2}});

感谢提示