在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
答案 0 :(得分:0)
终于找到了错误。导入其中一个字段时,会将一些 db.execSQL("CREATE TABLE IF NOT EXISTS " + YOUR_TABLE_NAME + ...
字段创建为price
。令人惊讶的是,在string
步骤中首次执行multiplication
时输出错误(输出正常直到它到达第一个错误字段,然后停止),但是在执行project
步骤。
为了找到我使用此查询的文本字段:
db.things.find({price:{$ type:2}});
感谢提示