MongoDB可以填写空白文档吗?

时间:2017-03-22 19:42:04

标签: mongodb

目前我有一系列日常记录,如下所示:

[{
    date: 2017-03-01 (isoDate),
    numItems: 12
},{
    date: 2017-03-04 (isoDate),
    numItems: 2
},{
    date: 2017-03-05 (isoDate),
    numItems: 4
},{
    date: 2017-03-07 (isoDate),
    numItems: 5
}]

mongo中是否有一种方法可以聚合记录,以便填写缺失的日期并将numItems归零,以便返回:

[{
    date: 2017-03-01 (isoDate),
    numItems: 12
},{
    date: 2017-03-02 (isoDate),
    numItems: 0
},{
    date: 2017-03-03 (isoDate),
    numItems: 0
},{
    date: 2017-03-04 (isoDate),
    numItems: 2
},{
    date: 2017-03-05 (isoDate),
    numItems: 4
},{
    date: 2017-03-06 (isoDate),
    numItems: 0
},{
    date: 2017-03-07 (isoDate),
    numItems: 5
}]

或者,最好将其作为后期处理吗?

1 个答案:

答案 0 :(得分:3)

是的,如果您使用Calendar Collection,即只是日期列表的帮助程序集合,您可以在数据库中执行此操作,无间隙。使用这样的日历集合,您可以组合一个聚合:

  1. 使用$lookup operator将日历集合加入您的每日记录集合
  2. 重新整形数据(根据需要使用$unwind$group$project)将已连接的数据(子文档数组)转换为所需的结构
  3. 使用ifnull operator中的$project stage确保numItems字段在尚不存在的文档中的默认值为0