我面临着Mongoose聚合查询的问题.我有以下架构,它是一个对象数组,包含endDate值.

[
  {
    "id": 1,
    "endDate": "2022-02-28T19:00:00.000Z"
  },
  {
    "id": 2,
    "endDate": "2022-02-24T19:00:00.000Z"
  },
  {
    "id": 3,
    "endDate": "2022-02-25T19:00:00.000Z"
  }
]

因此,在聚合结果期间,我必须添加一个新的字段名isPast,它包含布尔值,并执行计算以判断endDate是否通过.如果已经通过,则isPast将是true,否则为false.

我使用的是Moment库中的isBefore函数,它返回布尔值.但是在这个函数内部面临着一个关于传递endDate值的问题.$endDate是作为字符串传递的,而不是作为值传递的.

有没有办法在函数内部传递endDate的值?

const todayDate = moment(new Date()).format("YYYY-MM-DD");

db.collection.aggregate([
  {
    $addFields: {
      "isPast": moment('$endDate', 'YYYY-MM-DD').isBefore(todayDate)
    },

  },

])

推荐答案

你可以在没有时间的情况下取得成就.使用$toDate将日期时间字符串转换为日期

db.collection.aggregate([
  {
    $addFields: {
      "isPast": {
        $gt: [
          new Date(),
          {
            $toDate: "$endDate"
          }
        ]
      }
    }
  }
])

Sample Mongo Playground


如果您只想比较日期:

db.collection.aggregate([
  {
    $set: {
      "currentDate": "$$NOW",
      "endDate": {
        $toDate: "$endDate"
      }
    }
  },
  {
    $addFields: {
      "isPast": {
        $gt: [
          {
            "$dateFromParts": {
              "year": {
                $year: "$currentDate"
              },
              "month": {
                $month: "$currentDate"
              },
              "day": {
                "$dayOfMonth": "$currentDate"
              }
            }
          },
          {
            "$dateFromParts": {
              "year": {
                $year: "$endDate"
              },
              "month": {
                $month: "$endDate"
              },
              "day": {
                "$dayOfMonth": "$endDate"
              }
            }
          }
        ]
      }
    }
  }
])

Sample Mongo Playground (Compare date only)

Javascript相关问答推荐

当我使用jQuery时,我的图标显示为[对象对象]

vue3类型脚本中可能未定义对象''

如何指定1条记录1个表?

从PWA中的内部存储读取文件

在Angular中将样式应用于innerHTML

按下同意按钮与 puppeteer 师

浮动Div的淡出模糊效果

显示图—如何在图例项上添加删除线效果?

如何调用名称在字符串中的实例方法?

JS,当你点击卡片下方的绿色空间,而它是在它的背后转动时,

Prisma具有至少一个值的多对多关系

在Java中寻找三次Bezier曲线上的点及其Angular

有条件重定向到移动子域

如何在Angular拖放组件中同步数组?

JavaScript是否有多个`unfined`?

在FAQ Accodion应用程序中使用React useState时出现问题

为什么当我更新数据库时,我的所有组件都重新呈现?

如何使用[ModelJSON,ArrayBuffer]调用tf.loadGraphModelSync

为什么我不能使用其同级元素调用和更新子元素?

使用可配置项目创建网格