MongoDB 切片 - 从嵌套数组中删除最后 n 个元素

标签 mongodb mongodb-query aggregation-framework pymongo

假设我有以下数组:

{
   data: [1, 0, 4, 0, 0, 4, 1, 3, 0, 1, 0, 2, 2, 0, 1, 1, 0, 2, 0, 4, 1, 1, 0, 1, 1, 0]
}

如果我想选择除最后 3 个元素之外的所有元素,我可以使用建议的解决方案 here

db.collection.aggregate([
  {
    $project: {
      "_id": 0,
      "data": {
        "$slice": [ 
          "$data",
          0,
          {
            $subtract: [ { $size: "$data" }, 3 ]
          }
        ]
      }
    }
  }
])

我可以获得所需的输出:

[1, 0, 4, 0, 0, 4, 1, 3, 0, 1, 0, 2, 2, 0, 1, 1, 0, 2, 0, 4, 1, 1, 0]

如何对连接/嵌套数组执行相同的操作,例如:

 {
       data: [[1, 0, 4, 0, 0, 4, 1], [1, 0, 4, 0, 1, 5, 3]]
 }

为了选择除最后 3 个(每个数组)之外的所有元素?

预期输出:

        {
           data: [[1, 0, 4, 0], [1, 0, 4, 0]]
        }

最佳答案

您可以使用$map迭代数组并执行相同操作:

db.collection.aggregate([
  {
    $addFields: {
      data: {
        $map: {
          input: "$data",
          in: {
            "$slice": [
              "$$this",
              0,
              {
                $subtract: [
                  {
                    $size: "$$this"
                  },
                  3
                ]
              }
            ]
          }
        }
      }
    }
  }
])

测试: MongoDB-Playground

关于MongoDB 切片 - 从嵌套数组中删除最后 n 个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61193416/

相关文章:

c# - 删除实体类属性时 MongoDb.Driver 抛出异常

javascript - findOne 返回 null 但它不应该返回 null (mongoDB)

javascript - 聚合自定义时间段的mongodb记录

mongodb - Mongo 查询 : how to $lookup with DBRef

javascript - 按文档中的键汇总总计

mysql - 投票系统的数据库设计

mongodb - 集合 "total document size"大于数据库 "storage size"

node.js - NodeJS -> Mongodb 查询

Python3,MongoDB仅在文档不存在时插入

mongodb - 使用聚合框架按子文档字段分组