MongoDB上嵌套字段的乘法

MongoDB上嵌套字段的乘法,mongodb,aggregation-framework,multiplication,Mongodb,Aggregation Framework,Multiplication,在MongoDB中的一个数据库中,我尝试按日期对一些数据进行分组(一年中的每一天一组),然后添加一个额外的字段,该字段是两个现有字段相乘的结果 数据结构是: { "_id" : ObjectId("567a7c6d9da4bc18967a3947"), "units" : 3.0, "price" : 50.0, "name" : "Name goes here", "datetime" : ISODate("2015-12-23T10:50:21

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

数据结构是:

{
    "_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
)给出了预期的输出(预期值为unitsprice),但在执行第二步
$group
时,它会输出以下错误:

“errmsg”:$multiply仅支持数字类型,不支持字符串”, “代码”:16555

我也试着扭转局面,先做
$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

有什么方法可以实现这个乘法吗?另外,最好是输出没有嵌套字段,所以看起来像:

{"_id":
 "units":
 "price":
 "name":
 "datetime":
 "unitsprice":
}
提前谢谢


PS:我正在运行MongoDB 3.2

最终发现了错误。导入其中一个字段时,一些
price
字段被创建为
string
。令人惊讶的是,在
项目的
步骤中首次执行
乘法时,错误没有出现(输出正常,直到到达第一个错误的字段,然后停止),但在执行
步骤时。 为了查找文本字段,我使用了以下查询:

find({price:{$type:2}})


感谢提示

终于找到了错误。导入其中一个字段时,一些
价格
字段被创建为
字符串
。令人惊讶的是,在
项目
步骤中首次执行
乘法时,错误没有出现(输出正常,直到到达第一个错误的字段,然后停止),但在执行
步骤时。 为了查找文本字段,我使用了以下查询:

find({price:{$type:2}})


感谢您的提示

查询对我有效。是否可能在集合中的某个位置有类型错误的价格或单位字段?您可以使用以下查询进行检查:db.things.find({$or:[{$price:{$not:{$type:1}}},{$units:{$not:{$type:1}}}})是的,我有Double和Int32两个字段。我应该把所有字段都改成Double吗?有什么办法吗?谢谢!Double和Int32应该很好用。我认为你不需要把所有字段都改成Double。我已经检查过了,所有的单位和价格字段都是Int32或Double,所以问题似乎不存在,但无论如何,谢谢。还有通过第一种方法(先是$project,然后是$group)考虑到这一点,乘法确实给出了预期的输出,只有在$group步骤之后,我才得到错误消息这是您的真实数据结构吗?查询对我有效。是否可能集合中的某个地方有错误类型的price或unit字段?您可以使用这样的查询进行检查:db.things.find({$or:[{price:{$not:{$type:1}},{units:{$not:{$type:1}}]}是的,我有Double和Int32两个字段。我应该把所有字段都改成Double吗?有什么办法吗?谢谢!Double和Int32应该很好用。我认为你不需要把所有字段都改成Double。我已经检查过了,所有的单位和价格字段都是Int32或Double,所以问题似乎不存在,但无论如何,谢谢。还有考虑到通过执行第一种方法(首先是$project,然后是$group),乘法确实给出了预期的输出,只有在$group步骤之后,我才得到错误消息这是您的真实数据结构吗?