【问题标题】:Find using Aggregate documents where date can be in multiple ranges使用聚合文档查找日期可以在多个范围内的文档
【发布时间】:2021-09-18 05:26:51
【问题描述】:

我正在尝试编写一个查询,该查询基于日期范围数组进行过滤,并返回生日字段在其中一个范围内的文档:

const users = await User.aggregate([
      {
        $match: {
          birthday: {
            $or: [
              {
                $lte: "1998-01-01T00:00:00.000Z",
                $gte: "1997-01-01T00:00:00.000Z",
              },
              {
                $lte: "2000-01-01T00:00:00.000Z",
                $gte: "2001-01-01T00:00:00.000Z",
              },
              {
                $lte: "2002-01-01T00:00:00.000Z",
                $gte: "2003-01-01T00:00:00.000Z",
              },
            ],
          },
        },
      },
    ])

但是,这会返回此错误:

错误 MongoError: 未知操作符: $or

知道怎么做吗?

【问题讨论】:

    标签: mongodb mongoose mongodb-query aggregation-framework


    【解决方案1】:

    $or 运算符是顶级运算符,它将对表达式数组执行逻辑$or 操作,而您需要在对象/元素数组中使用字段名称指定整个条件,如果相同的字段,你需要在数组的所有元素中重复它,

    改正如下语法,

    {
        $match: {
            $or: [
                {
                    birthday: {
                        $lte: "1998-01-01T00:00:00.000Z",
                        $gte: "1997-01-01T00:00:00.000Z"
                    }
                },
                {
                    birthday: {
                        $lte: "2000-01-01T00:00:00.000Z",
                        $gte: "2001-01-01T00:00:00.000Z"
                    }
                },
                {
                    birthday: {
                        $lte: "2002-01-01T00:00:00.000Z",
                        $gte: "2003-01-01T00:00:00.000Z"
                    }
                }
            ]
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-01-09
      • 1970-01-01
      • 1970-01-01
      • 2021-02-24
      • 1970-01-01
      • 2020-04-21
      • 1970-01-01
      • 2020-03-19
      • 1970-01-01
      相关资源
      最近更新 更多