首页 > 解决方案 > 如何在给定 MongoDB 中的元素位置的情况下提取数组的切片?

问题描述

我正在尝试在给定某个元素的位置(示例中的 action4)的情况下在 MongoDB 中提取数组的一部分。样本数据为

[{name: 'John Doe', actions: ['action1', 'action2', 'action3', 'action4']},
{name: 'Margie Addams', actions: ['action1', 'action2', 'action4', 'action3']},
{name: 'Fer Doughnut', actions: ['action1', 'action4', 'action3', 'action2']},
{name: 'Anthony Peralta', actions: ['action1', 'action2', 'action3', 'action4']},
{name: 'Pete Parker', actions: ['action1', 'action2', 'action3', 'action4']},
{name: 'Josh Dean', actions: ['action4', 'action2', 'action3', 'action1']}]

我设法action4通过聚合查询找到数组内部的位置,例如

{$indexOfArray: ["$actions", "action4"]}

但找不到从数组开头提取到其位置的方法。有什么建议吗?

标签: mongodbaggregation-framework

解决方案


您可以像这样使用$slice$indexOfArray聚合运算符:

db.collection.aggregate([
  {
    $addFields: {
      actions: {
        $slice: [
          "$actions",
          {
            $indexOfArray: [
              "$actions",
              "action4"
            ]
          }
        ]
      }
    }
  }
])

操场


推荐阅读