首页 > 解决方案 > 根据时间过滤记录时出错

问题描述

我的收藏中的用户记录很少。对于该记录,插入时间是toISOString格式。我正在尝试使用查找查询忽略超过 3 天的记录,但出现一些错误。

错误:查询错误:无法解析查询内容:无效字符“。” 在数组元素之后

我的记录:

[
  {
    "_id": "1",
    "name": "user1",
    "data":"some data",
    "insertionTime": "2020-11-10T10:18:27.158Z",
  },
  {
    "_id": "2",
     "name": "user1",
    "data":"some data"
    "insertionTime": "2020-11-10T14:18:27.158Z",
  },
  {
    "_id": "3",
     "name": "user1",
    "data":"some data",
    "insertionTime": "2020-11-06T14:18:27.158Z",
  }
]

预期输出:

[
  {
    "_id": "2",
     "name": "user1",
    "data":"some data",
    "insertionTime": "2020-11-10T14:18:27.158Z",
  },
  {
    "_id": "3",
     "name": "user1",
    "data":"some data",
    "insertionTime": "2020-11-10T14:18:27.158Z",
  }
]

我试过的查询:

db.collection.find({ $expr: { $and: [ { $eq: ['$name', 'user1'] }, { $gte: [ { $dateFromString: { dateString: '$insertionTime' } }, new Date(Date.now() - 3 * 24 * 60 * 60 * 1000), ], }, ], }, });

有人可以帮我解决这个问题吗?

标签: mongodbmongoosemongodb-querynosql-aggregation

解决方案


错误在这一行new Date(Date.now() - 3 * 24 * 60 * 60 * 1000)

您必须使用$subtract来执行减法。

db.collection.find({
  $expr: {
    $and: [
      {
        $eq: [
          "$name",
          "user1"
        ]
      },
      {
        $gte: [
          {
            $dateFromString: {
              dateString: "$insertionTime"
            }
          },
          {
            "$subtract": [
              new Date(Date.now()),
              259200000
            ]
          }
        ]
      }
    ]
  }
})

操场


推荐阅读