在聚合管道中按索引过滤数组项

filter Items of Array by Index in Aggregation Pipeline

我有 mongodb 数据库,我有这个文件结构:

   {
     "_id": ObjectId("2145214545ffff"),
     "arr":[a , b , c , d , e , f , g , h , i, j]
   }

我想执行聚合管道,这给了我这个结果:

 {
         "_id": ObjectId("2145214545ffff"),
         "arr":[a , d , g , j ]
       }

所以我需要的是对数组的项目进行某种过滤,这会给我第一个、第四个、第七个等等项目。 感谢进阶

您需要使用 $map and $range 个运算符。

以下查询会有所帮助:

db.collection.aggregate([
  {
    $project: {
      arr: {
        $map: {
          input: {
            $range: [
              0,
              {
                $size: "$arr"
              },
              3
            ]
          },
          as: "a",
          in: {
            $arrayElemAt: [
              "$arr",
              "$$a"
            ]
          }
        }
      }
    }
  }
])

MongoPlayGroundLink