首页 > 解决方案 > 使用聚合文档查找日期可以在多个范围内的文档

问题描述

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

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:未知运算符:$ 或

知道怎么做吗?

标签: mongodbmongoosemongodb-queryaggregation-framework

解决方案


$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"
                }
            }
        ]
    }
}

推荐阅读