Mongodb从当前日期的时间字符串获取日期

时间:2020-04-30 05:15:37

标签: mongodb aggregation-framework

我有一个类似以下的收藏

<table className={classes.table}>
    <thead>
        <tr>
            <td></td>
            {
                sit.sit.map((sit) => (<td className={classes.sitCell} align='center' key={sit}>{sit}</td>))
            }
        </tr>
    </thead>
    <tbody>
        {
            sit.row.map(row => (
                <tr key={row}>
                    <td className={classes.rowCell} align='left'>{row}</td>
                    {
                        sit.sit.map((sit, index) => (<td className={classes.sit} key={index}><MenuItem id={index} onClick={handleSitClick} disabled={selected} className={classes.sit}></MenuItem></td>))
                    }
                </tr>
            ))
        }
    </tbody>
</table>

3 个答案:

答案 0 :(得分:1)

您需要先将日期转换为ISODate

您可以$concat使用以下moment格式。

db.collection.aggregate([
  {
    $project: {
      date: {
        $dateFromString: {
          dateString: { $concat: [moment().format("YYYY-MM-DDT"), "$str"] },
          timezone: "Asia/Kolkata"
        }
      }
    }
  }
])

答案 1 :(得分:1)

您可以尝试下面的查询,其中$$NOW将返回当前日期时间值:

db.collection.aggregate([
  {
    $addFields: {
      date: {
        $dateFromParts: {
          year: { $year: "$$NOW" },
          month: { $month: "$$NOW" },
          day: { $dayOfMonth: "$$NOW" },
          hour: { $toInt: { $substrBytes: ["$str", 0, 2] } },
          minute: { $toInt: { $substrBytes: ["$str", 3, 2] } },
          second: { $toInt: { $substrBytes: ["$str", 6, 2] } },
          timezone: "Asia/Kolkata",
        }
      }
    }
  }
])

测试: mongoplayground

更新:

db.collection.aggregate([
  {
    $addFields: {
      date: {
        $dateFromString: {
          dateString: {
            $concat: [
              {
                $dateToString: {
                  format: "%Y-%m-%d",
                  date: "$$NOW",
                  timezone: "Asia/Kolkata"
                }
              },
              "T",
              "$str"
            ]
          },
          timezone: "Asia/Kolkata"
        }
      }
    }
  }
])

测试: mongoplayground

答案 2 :(得分:0)

就像@Ashh发布的上述解决方案

我更喜欢另一种解决问题的方法,而无需使用时间依赖性

db.collection.aggregate([
  {
    $addFields: {
      date: new Date()
    }
  },
  {
    $addFields: {
      date: {
        $dateToString: {
          date: "$date",
          format: "%Y-%m-%d",
          timezone: "Asia/Kolkata"
        }
      }
    }
  },
  {
    $addFields: {
      date: {
        $dateFromString: {
          dateString: {
            $concat: [
              "$date",
              "T",
              "$str",

            ]
          },
          timezone: "Asia/Kolkata"
        }
      }
    }
  }
])