MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Cách xóa một phần tử khỏi mảng lồng đôi trong tài liệu MongoDB.

Để xóa mục được đề cập, bạn thực sự sẽ sử dụng một bản cập nhật. Cụ thể hơn, bạn sẽ cập nhật với $pull lệnh này sẽ xóa mục khỏi mảng.

db.temp.update(
  { _id : "777" },
  {$pull : {"someArray.0.someNestedArray" : {"name":"delete me"}}}
)

Có một chút "ma thuật" đang xảy ra ở đây. Sử dụng .0 cho biết rằng chúng tôi biết rằng chúng tôi đang sửa đổi mục thứ 0 của someArray . Sử dụng {"name":"delete me"} cho biết rằng chúng tôi biết dữ liệu chính xác mà chúng tôi định xóa.

Quá trình này hoạt động tốt nếu bạn tải dữ liệu vào máy khách và sau đó thực hiện cập nhật. Quá trình này hoạt động kém hiệu quả hơn nếu bạn muốn thực hiện các truy vấn "chung chung" thực hiện các hoạt động này.

Tôi nghĩ rằng dễ dàng nhất để đơn giản nhận ra rằng việc cập nhật các mảng tài liệu con thường yêu cầu bạn phải có tài liệu gốc trong bộ nhớ tại một số thời điểm.

Trả lời nhận xét đầu tiên bên dưới, bạn có thể có thể giúp đỡ tình huống của mình bằng cách thay đổi cấu trúc dữ liệu một chút

"someObjects" : {
  "name1":  {
        "someNestedArray" : [
            {
                "name" : "value"
            },
            {
                "name" : "delete me"
            }
        ]
    }
}

Bây giờ bạn có thể thực hiện {$pull : { "someObjects.name1.someNestedArray" : ...

Đây là vấn đề với cấu trúc của bạn. MongoDB không hỗ trợ tốt cho việc thao tác với các "mảng con". Cấu trúc của bạn có một mảng các đối tượng và những đối tượng đó chứa các mảng nhiều đối tượng hơn.

Nếu có cấu trúc sau, bạn sẽ gặp khó khăn khi sử dụng những thứ như $pull :

array [
  { subarray : array [] },
  { subarray : array [] },
]

Nếu cấu trúc của bạn trông giống như vậy bạn muốn cập nhật subarray bạn có hai lựa chọn:

  1. Thay đổi cấu trúc của bạn để bạn có thể tận dụng $pull .
  2. Không sử dụng $pull . Tải toàn bộ đối tượng vào một ứng dụng khách và sử dụng findAndModify .


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tại sao _id với ObjectID được thêm vào khi sử dụng $ push của MongoDB để thêm đối tượng mới vào một mảng?

  2. MongoDB 4.2 Quản lý &Giám sát mà không cần Lockin của nhà cung cấp

  3. Kiểm tra xem mọi phần tử trong mảng có khớp với điều kiện không

  4. 3 cách chuyển đổi chuỗi thành ngày trong MongoDB

  5. Những lý do nên và không nên chuyển từ máy chủ SQL sang MongoDB