Mongodb查询以计算每个文档两个日期之间的天数

Mongodb查询以计算每个文档两个日期之间的天数,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,样本文档: 我是mongodb的新手,我想计算状态等于“已拒绝”的每个文档字段之间的日期间隔天数。您可以尝试以下查询: db.collection.aggregate([ /** Filter out docs */ { $match: { status: "rejected" } }, /** subtract two dates gets timestamp & divide to convert to days & round value */ {

样本文档:


我是mongodb的新手,我想计算状态等于“已拒绝”的每个文档字段之间的日期间隔天数。

您可以尝试以下查询:

db.collection.aggregate([
  /** Filter out docs */
  { $match: { status: "rejected" } },
  /** subtract two dates gets timestamp & divide to convert to days & round value */
  {
    $addFields: {
      daysCount: {
        $round: { $divide: [{ $subtract: ["$to", "$from"] }, 86400000] }
      }
    }
  }
]);

测试:

您可以尝试以下查询:

db.collection.aggregate([
  /** Filter out docs */
  { $match: { status: "rejected" } },
  /** subtract two dates gets timestamp & divide to convert to days & round value */
  {
    $addFields: {
      daysCount: {
        $round: { $divide: [{ $subtract: ["$to", "$from"] }, 86400000] }
      }
    }
  }
]);
测试:

使用运算符ans减去日期,然后将使用结果(以毫秒为单位)转换为天:

db.mycollection.aggregate([
      {
        "$project": {            
          "date_diff": { "$subtract": ["$to", "$from"] }
        }
      },
      {
        "$project": {             
          "days": { "$divide": ["$date_diff", 1000 * 60 * 60 * 24] }
        }
      }
    ])
为了便于可视化,这里有两个管道阶段,但可以在一个管道阶段合并

此外,您可能需要将天数从浮点转换为整数。这取决于你

使用运算符ans减去日期,然后将使用结果(以毫秒为单位)转换为天:

db.mycollection.aggregate([
      {
        "$project": {            
          "date_diff": { "$subtract": ["$to", "$from"] }
        }
      },
      {
        "$project": {             
          "days": { "$divide": ["$date_diff", 1000 * 60 * 60 * 24] }
        }
      }
    ])
为了便于可视化,这里有两个管道阶段,但可以在一个管道阶段合并

此外,您可能需要将天数从浮点转换为整数。这取决于你