使用聚合文档查找日期可以在多个范围内的文档

时间:2021-07-07 16:34:31

标签: mongodb mongoose mongodb-query aggregation-framework

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

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

知道怎么做吗?

1 个答案:

答案 0 :(得分:1)

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

更正如下语法,

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