MongoDB聚合:从数组中的日期/时间戳获取日,月和年

时间:2020-06-18 16:16:15

标签: arrays mongodb mongodb-query aggregation-framework

此语法是查找任何对象“ gt”的日期或两个带有“ lt”的日期之间的内容,所以我这样做:

HttpHeaders

这是结果,它有效:

db.compte.aggregate([
  {
    $project: {
      time: {
        $filter: {
          input: "$auditMessages",
          as: "auditMessages",
          cond: {
            $and: [
              {
                $gt: ["$$auditMessages.timestamp", "2020-05-20T07:18:42.115Z"]
              }
            ]
          }
        }
      }
    }
  }
]);

现在我想查找日期,月份和年份,例如,我想要这样的时间戳: 年:2020 月:05 一天:20 时间:07 分钟:18毫秒:42

谢谢。

1 个答案:

答案 0 :(得分:0)

您需要的是聚合运算符$dateToParts

作为您的日期字段,即; timestamp在数组中,我们正在使用$map进行迭代并合并所有字段yearmonthhourminute等。 。还原为实际对象,然后将其推回time数组。

db.collection.aggregate([
  {
    $addFields: {
      time: {
        $map: {
          input: "$time",
          in: {
            $mergeObjects: [
              "$$this",
              {
                $dateToParts: {
                  date: "$$this.timestamp"
                }
              }
            ]
          }
        }
      }
    }
  }
])

测试: mongoplayground

注意:

以防万一,如果您的timestamp字段是字符串,则需要使用$dateFromString运算符将其转换为日期。检查以下内容:mongoplayground

更改将在此处:

 {
    $dateToParts: {
         date: {
           $dateFromString: {
               dateString: "$$this.timestamp"
            }
         }
      }
   }