首页 > 解决方案 > 获取字符串日期之间的数据 MongoDB

问题描述

我有一个问题如何在开始日期之间获取数据,因为它只是字符串,而我的文档架构是这样的

"_id" : ObjectId("5ab92bdd6fbcd28fb0c68ff6"),
"username" : "jumbreng",
"startdate" : "26-03-2018",
"enddate" : "11-08-2018",
"status" : 1

我一直在尝试像这样创建聚合

    db.presensi.aggregate( [ {
   $project: {   
      "username": "$username",
      "startdate": {
         $dateFromString: {
            dateString: '$startdate',
         }
      },
      "enddate" :{
         $dateFromString: {
            dateString: '$enddate',
         }
   }
   }
} ] )

但我不知道如何使它具有像 find($lte 和 $gte) 这样的范围,我应该将此聚合更新到我的集合吗?然后我可以创建语句 find($lte 和 $gte)?如何聚合到我的收藏?

标签: mongodb

解决方案


$dateFromString聚合运算符可以帮助您。

试试看:

db.user.aggregate(

// Pipeline
[
    // Stage 1
    {
        $project: {
            _id: true,
            startdate: true,
            enddate: true,
            status: true,
            username: "$username",
            isBetween: {
                $and: [{
                    $lt: [{
                        $dateFromString: {
                            dateString: '$startdate',
                        }
                    }, {
                        $dateFromString: {
                            dateString: '27-03-2018',
                        }
                    }]
                }, {
                    $gt: [{
                        $dateFromString: {
                            dateString: '$startdate',
                        }
                    }, {
                        $dateFromString: {
                            dateString: '25-03-2018',
                        }
                    }]
                }]
            }
        }
    },

    // Stage 2
    {
        $match: {
            "isBetween": true
        }
    },
], {
    cursor: {
        batchSize: 50
    }
});

推荐阅读