如何在mongodb上对数组字段进行过滤和切片

问题描述 投票:0回答:1

如何制作过滤器,然后在 mongodb 中切片一些数组

我尝试过这个聚合,但出现错误。我认为问题出在项目阶段。项目阶段不能接受两种表达方式。还有别的办法吗

 [
  {
    $match: {
      _id: ObjectId("65a739bc29c608fd90b65038"),
    },
  },
  {
    $project: {
      date: 1,
      serviceScheduleId: 1,
      serviceId: 1,
      branchOfficeId: 1,
      queue: {
        $filter: {
          input: "$queue",
          cond: {
            $and: [
              {
                $eq: [
                  "$$this.user.status",
                  "waiting",
                ],
              },

            ],
          },
        },
        $slice:["$queue",1]
      },
    },
  },
]
python mongodb aggregate
1个回答
0
投票

您应该需要额外的

$set
/
$project
阶段来使用
queue
运算符设置
$slice
字段。

{
  $project: {
    ...,
    queue: {
      $filter: {
        input: "$queue",
        cond: {
          $and: [
            {
              $eq: [
                "$$this.user.status",
                "waiting"
              ]
            }
          ]
        }
      }
    }
  }
},
{
  $set: {
    queue: {
      $slice: ["$queue", 1]
    }
  }
}

或者将整个

$filter
运算符作为
$slice
运算符的第一个参数。

{
  $project: {
    ...
    queue: {
      $slice: [
        {
          $filter: {
            input: "$queue",
            cond: {
              $and: [
                {
                  $eq: [
                    "$$this.user.status",
                    "waiting"
                  ]
                }
              ]
            }
          }
        },
        1
      ]
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.