【问题标题】:Mongoose date $gte operator not working as expectedMongoose date $gte 运算符未按预期工作
【发布时间】:2020-11-26 02:32:02
【问题描述】:

我正在尝试编写上周的查询,但它在 mongoDB 中没有按预期工作。

[{
    $lookup: {
        from: 'reviews',
        localField: 'groupReviews',
        foreignField: '_id',
        as: 'groupReviews'
    }
}, {
    $match: {
        $and: [{
                _id: {
                    $eq: ObjectId('5f247eea8ad8eb53883f4a9b')
                }
            },
            {
                "groupReviews.reviewCreated": {
                    $gte: ISODate('2020-06-20T10:24:51.303Z')
                }
            }
        ]
    }
}, {
    $project: {
        count: {
            $size: "$groupReviews",
        },
        groupReviews: {
            $slice: ["$groupReviews", 0, 20],
        }
    }
}, {
    $sort: {
        "groupReviews.reviewCreated": -1
    }
}]

实际结果:以上代码返回的结果早于 2020-06-20。

预期结果:它不应显示早于 2020-06-20。

我附上一张图片以供参考。

Image Link

【问题讨论】:

  • 为什么将结果显示为图像?查询是如何运行的?

标签: javascript mongodb date mongoose mongodb-query


【解决方案1】:

$match 阶段匹配整个文档,而不是单个数组元素。如果数组包含至少一个满足$gte 条件的元素,则文档将被匹配并沿管道传递。

如果您想删除早于给定日期的单个数组元素,您可以

  • $unwind 匹配前的数组,$group 仅使用匹配的条目重建它
  • 在您的 $project 阶段使用 $filter 在切片之前消除不需要的元素

【讨论】:

    猜你喜欢
    • 2015-05-11
    • 2019-06-20
    • 2021-04-13
    • 1970-01-01
    • 2021-07-12
    • 2020-12-29
    • 2021-04-30
    • 2019-12-10
    相关资源
    最近更新 更多