我有一个包含createdAt字段的Collection .我想拿到上个月1号以后的文件.我创建了一个聚合查询,并将上个月1日的日期添加到每个文档.然而,当我使用$match过滤文档时,我得到的是空文档,尽管数据库中有一些数据.

以下是查询:

db.user_activity_trackings.aggregate([{
    $project: {
        "firstDayOfLastMonth": {
            "$dateFromParts": {
                "year": { "$year": { "$dateAdd": { "startDate": "$$NOW", "unit": "month", "amount": -1 } } },
                "month": { "$month": { "$dateAdd": { "startDate": "$$NOW", "unit": "month", "amount": -1 } } },
                "day": 1
            }
        },
        "createdAt": 1,
    }
},
{
    $match: {
        "createdAt": { $gte: "$firstDayOfLastMonth" }
    }
}])

推荐答案

要通过比较文档中的两个字段来筛选文档,您需要使用$expr运算符.

$expr可以构建在$match阶段中比较来自同一文档的字段的查询表达式.

{
  $match: {
    $expr: {
      $gte: [
        "$createdAt",
        "$firstDayOfLastMonth"
      ]
    }
  }
}

Demo @ Mongo Playground

Mongodb相关问答推荐

如何在MongoDB中正确解析佛年?

在mongo聚合管道的组阶段排除字段,但在最后将其包含在内

如何将以下聚合查询转换为 bson 并在 golang 中执行

使用名为 Object 键的 uuid 创建 mongodb 文档

MongoDB 支持的最 Big Data 库数

TypeError:Cannot read property '_id' of undefined

PHP 无法加载动态库 (mongo.so)

MongoDB 的 Java 语法

具有最佳插入/秒性能的数据库?

Mongoid 有 Map/Reduce 吗?

Mongo 可尾游标与 Redis 发布/订阅

Mongo:统计一组文档中单词出现的次数

如何将 mongoDB 数据导出为 CSV 格式?

没有参考选项的mongoose填充字段

更新时提示Field name duplication not allowed with modifiers

pre save和validate之间的mongoose区别?什么时候用哪一个?

无法在 mac os 10.9 上安装 mongodb php 驱动程序

Mongodb同时在多个字段上聚合(计数)

查找聚合性能差

MongoDB Compass:select distinct field values