【问题标题】:Pop last array element with aggregation pipeline in mongoldb在 mongodb 中使用聚合管道弹出最后一个数组元素
【发布时间】:2021-10-30 05:22:14
【问题描述】:

如果操作后为空,我有这段代码可以删除数组元素并取消设置数组字段:

db.collection.update(
  { "array": 1 },
  [{
    $set: {
      array: {
        $filter: {
          input: "$array",
          cond: { $ne: ["$$this", 1] }
        }
      }
    }
  },
  {
    $set: {
      array: {
        $cond: [
          { $eq: ["$array", []] },
          "$$REMOVE",
          "$array"
        ]
      }
    }
  }]
)

如果操作后为空,是否可以弹出最后一个数组元素并取消设置数组字段?

【问题讨论】:

    标签: arrays mongodb


    【解决方案1】:

    您可以使用$slice 运算符从最后一个位置删除最后一个元素,

    • $size 获取 array 中的总元素
    • $subtract 从上述总元素中减去 1
    • $slice 从上到下对所有元素进行切片返回编号
    db.collection.update(
      { "array": { $ne: [] } },
      [{
        $set: {
          array: {
            $slice: [
              "$array",
              { $subtract: [{ $size: "$array" }, 1] }
            ]
          }
        }
      },
      {
        $set: {
          array: {
            $cond: [{ $eq: ["$array", []] }, "$$REMOVE", "$array"]
          }
        }
      }]
    )
    

    Playground

    【讨论】:

      猜你喜欢
      • 2018-04-30
      • 2018-05-06
      • 2021-11-17
      • 2021-02-14
      • 1970-01-01
      • 2014-01-28
      • 1970-01-01
      • 2020-12-12
      • 1970-01-01
      相关资源
      最近更新 更多