如何在mongodb中找到保存为字符串的日期

jk9hmnmh  于 2023-10-16  发布在  Go
关注(0)|答案(1)|浏览(96)

我在我的集合中有字段LAST_DATE_LIVE字段,值以DD/MM/YYYY HH:mm:ss格式保存为string,例如:“06/12/2021 03:30:00”.
我在我的API中有一个过滤器,它接收的值为**“DD/MM/YYYY”**(过滤器中不允许时间)和范围“DD/MM/YYYY-DD/MM/YYYY”)。我在使用管道聚合。
这是查询的一部分:

queryFilter = {
                $and: [
                    { 
                        $or: [
                            {
                                'LAST_DATE_LIVE': hasInterval ? { $gte: startDate, $lte: endDate } : { $regex: `^${startDate}` }
                            }
                        ]
                    }
                ]
            };

startDate有一个值,正如我在DD/MM/YYYY格式中提到的,endDate也是如此。
当我没有一个范围,查询工作得很好,问题是在**范围 *。有什么办法吗?

siotufzp

siotufzp1#

不确定您希望如何处理时间组件(例如,是2021-06-14的结束日期,意思是午夜或11:59:59),但一般来说,如果使用真实的日期,而不是DD/MM/YYYY字符串,这很容易做到。

sd = new ISODate('2021-06-13');
ed = new ISODate('2021-06-14');
c=db.foo.aggregate([
    {$match: {$expr:
          // The $dateFromString function is rather "long" so instead of 
          // calling it twice, use $let to set up a converted
          // value once and use it in the $and:
          {$let: {
                  vars: {'xd': {$dateFromString: {
                      dateString: '$LAST_DATE_LIVE',
                      format: '%m/%d/%Y %H:%M:%S'}} },
                  in:  {$and:[ {$gte:['$$xd',sd]}, {$lte:['$$xd',ed]} ]}
              }}
     }}
]);

相关问题