在汇总查询中查询日期范围不返回任何内容或忽略日期

时间:2019-07-02 13:04:55

标签: mongodb mongoose mongodb-query aggregation-framework

在汇总查询中,我试图在$ match语句中添加条件以仅返回给定日期范围内的记录。没有转换为ISOString,我得到了一组记录,这些记录完全忽略了日期范围。当我转换为ISOString时,我什么也没得到(返回空集)。我试过使用$ and运算符,仍然没有。

我尝试了所有堆栈上的解决方案,但都没有成功。这是我的代码:

$match: { 
            $and: [
                {'author.id': { $ne: req.user._id }},
                {'blurtDate': { $gte: test1.toISOString() }},
                {'blurtDate': { $lte: test2.toISOString() }}
            ]
        }

test1和test2正确,我在控制台日志上检查了它们,反映如下:

2019-06-02T12:44:39.000Z -- 2019-07-02T12:44:39.928Z

我也尝试了不使用$ and运算符的方式,

$match: { 
            'author.id': { $ne: req.user._id },
            'blurtDate': { $gte: test1.toISOString() },
            'blurtDate': { $lte: test2.toISOString() } 
        }

再次返回什么。任何帮助,不胜感激!

编辑:想要强调test1和test2是新的日期对象:

test1 = new Date(qryDateFrom);  //Tried .toISOString() as well
test2 = new Date(qryDateTo);

没有.toISOString(),我得到了忽略日期的返回值。使用.toISOString,我得到一个空的回报。

以下是应返回的示例文档:

{
    "_id" : ObjectId("5d0a807345c85d00ac4b7217"),
    "text" : "<p>Seriously RV style.</p>",
    "blurtDate" : ISODate("2019-06-19T18:35:31.156Z"),
    "blurtImg" : "04643410-92c1-11e9-80b6-a3262311afff.png",
    "vote" : 0,
    "author" : {
        "id" : ObjectId("5cb5df0ef7a3570bb4ac6e05"),
        "name" : "Benjamin Paine"
    },
    "__v" : 0
}

当我删除.toISOString()时,得到的文档超出了预期的日期范围,例如5月的这一日期(查询只应在6月2日到7月2日之间返回)。

{
    "_id" : ObjectId("5d07ebaf9a035117e4546349"),
    "text" : "<p>A start to something more...</p>",
    "blurtDate" : ISODate("2019-05-15T19:36:15.737Z"),
    "blurtImg" : "2be7a160-9137-11e9-933f-6966b2e503c7.png",
    "vote" : 0,
    "author" : {
        "id" : ObjectId("5cb5df0ef7a3570bb4ac6e05"),
        "name" : "Benjamin Paine"
    },
    "__v" : 0
}

1 个答案:

答案 0 :(得分:1)

您的文档包含实际的Date对象,因此请从查询中删除.toISOString()。但是,您还需要将$gte$lte术语组合成一个对象:

$match: { 
    'author.id': { $ne: req.user._id },
    'blurtDate': { $gte: test1, $lte: test2 }
}