Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Xóa giá trị khỏi mảng lồng nhau (matrix) trong MongoDB

Để xóa giá trị khỏi mảng lồng nhau (matrix/2D array), sử dụng toán tử $pull trong MongoDB.

Tạo collection với ma trận 6x2

> db.demo632.insertOne({
  "arrayMatrix": [
    [10,20], [10,20], [10,20],
    [10,20], [10,20], [10,20]
  ]
});

Hiển thị ma trận gốc

> db.demo632.find().pretty();

Kết quả:

{
  "_id" : ObjectId("5e9b27b46c954c74be91e6c0"),
  "arrayMatrix" : [
    [10, 20], [10, 20], [10, 20],
    [10, 20], [10, 20], [10, 20]
  ]
}

Xóa giá trị 20 khỏi từng hàng (index 0-5)

> db.demo632.update(
  {},
  {
    "$pull": {
      "arrayMatrix.0": 20,
      "arrayMatrix.1": 20,
      "arrayMatrix.2": 20,
      "arrayMatrix.3": 20,
      "arrayMatrix.4": 20,
      "arrayMatrix.5": 20
    }
  }
)

Kết quả sau xóa:

{
  "_id" : ObjectId("5e9b27b46c954c74be91e6c0"),
  "arrayMatrix" : [
    [10], [10], [10], [10], [10], [10]
  ]
}

Giải thích:

  • $pull xóa tất cả phần tử khớp giá trị khỏi mảng
  • Cú pháp "arrayMatrix.0" truy cập phần tử index 0 của mảng ngoài (hàng đầu tiên)
  • Phải chỉ định rõ từng index (0,1,2,3,4,5) vì $pull không hỗ trợ wildcard cho index mảng lồng nhau
  • Mỗi hàng [10,20] trở thành [10] sau khi xóa 20

Cải tiến: Nếu ma trận lớn, có thể dùng $[] (all positional operator) MongoDB 3.6+ kết hợp arrayFilters để xóa theo điều kiện mà không cần liệt kê index.