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

MongoDB findOneAndDelete ()

Trong MongoDB, db.collection.findOneAndDelete() phương thức xóa một tài liệu và trả về tài liệu đã xóa.

Nó xóa tài liệu phù hợp đầu tiên trong bộ sưu tập phù hợp với filter . sort tham số có thể được sử dụng để ảnh hưởng đến tài liệu nào bị xóa.

Bộ sưu tập collection một phần là tên của bộ sưu tập để xóa tài liệu.

Ví dụ

Giả sử chúng ta có một bộ sưu tập có tên là pets chứa các tài liệu sau:

{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 }
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 }
{ "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 }
{ "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 }
{ "_id" : 5, "name" : "Bruce", "type" : "Bat", "weight" : 3 }
{ "_id" : 6, "name" : "Fetch", "type" : "Dog", "specs" : { "height" : 400, "weight" : 15, "color" : "brown" } }
{ "_id" : 7, "name" : "Jake", "type" : "Dog", "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] }

Chúng ta có thể sử dụng db.collection.findOneAndDelete() phương pháp xóa một trong những tài liệu đó.

db.pets.findOneAndDelete(
   { "type": "Cat" }
)

Kết quả:

{ "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 }

Trong trường hợp này, tôi đã sử dụng một truy vấn để thu hẹp nó thành chỉ mèo. Chỉ có một con mèo bị xóa, mặc dù có hai con mèo trong bộ sưu tập.

Hãy kiểm tra bộ sưu tập.

db.pets.find()

Kết quả:

{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 }
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 }
{ "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 }
{ "_id" : 5, "name" : "Bruce", "type" : "Bat", "weight" : 3 }
{ "_id" : 6, "name" : "Fetch", "type" : "Dog", "specs" : { "height" : 400, "weight" : 15, "color" : "brown" } }
{ "_id" : 7, "name" : "Jake", "type" : "Dog", "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] }

Chúng ta có thể thấy rằng con mèo đầu tiên (tài liệu 3) đã bị xóa.

Tài liệu được nhúng

Nếu bạn có tài liệu chứa tài liệu được nhúng, bạn có thể sử dụng các phương pháp sau để truy vấn dữ liệu trong tài liệu được nhúng.

  • Ký hiệu dấu chấm (ví dụ:field.nestedfield: <value> )
  • Biểu mẫu lồng nhau (ví dụ:{field: { nestedfield: <value> } } ). Lưu ý rằng tùy chọn này chỉ khả dụng trong MongoDB 4.4.

Dưới đây là một ví dụ sử dụng ký hiệu dấu chấm để truy vấn trong tài liệu được nhúng.

db.pets.findOneAndDelete({ "specs.height": 400 })

Kết quả:

{
	"_id" : 6,
	"name" : "Fetch",
	"type" : "Dog",
	"specs" : {
		"height" : 400,
		"weight" : 15,
		"color" : "brown"
	}
}

Như mong đợi, tài liệu 6 đã bị xóa.

Truy vấn sau sẽ xóa cùng một tài liệu, nhưng trong trường hợp này, nó sử dụng biểu mẫu lồng nhau để tham chiếu đến tài liệu được nhúng.

db.pets.findOneAndDelete({ 
    "specs" : {
		"height" : 400,
		"weight" : 15,
		"color" : "brown"
	}
 })

Khi sử dụng biểu mẫu lồng nhau, truy vấn phải khớp chính xác với toàn bộ tài liệu được nhúng. Ví dụ:truy vấn sau không khớp:

db.pets.findOneAndDelete({ 
    "specs" : {
		"height" : 400
	}
 })

Kết quả:

null

Mảng

Bạn có thể tham chiếu dữ liệu trong mảng bằng cách tham chiếu phần tử mảng theo chỉ số của nó hoặc theo giá trị của nó.

Nếu chúng tôi muốn xóa tất cả các con chó có giải thưởng Top Dog, chúng tôi có thể viết truy vấn sau (truy vấn sẽ trả về con chó ở trên).

db.pets.findOneAndDelete({ 
    "awards": "Top Dog"
})

Kết quả:

{
	"_id" : 7,
	"name" : "Jake",
	"type" : "Dog",
	"awards" : [
		"Top Dog",
		"Best Dog",
		"Biggest Dog"
	]
}

Bạn cũng có thể chỉ định chỉ mục phần tử, như sau:

db.pets.findOneAndDelete({ 
    "awards.0": "Top Dog"
})

Thực hiện điều đó yêu cầu giá trị được chỉ định phải ở chỉ mục được chỉ định. Do đó, truy vấn sau không trả về cùng một con chó.

db.pets.findOneAndDelete({ 
    "awards.1": "Top Dog"
})

Lưu ý rằng mảng dựa trên 0, vì vậy chỉ số 0 chỉ định phần tử đầu tiên, 1 chỉ định phần tử thứ hai, v.v.

sort Tham số

Bạn có thể sử dụng sort tham số để chỉ định thứ tự sắp xếp cho các tài liệu được khớp với filter . Điều này sẽ ảnh hưởng đến tài liệu nào bị xóa.

Khi sử dụng sort tham số, giá trị của 1 sắp xếp các tài liệu theo thứ tự tăng dần và giá trị -1 sắp xếp chúng theo thứ tự giảm dần.

Đối số cần được cung cấp dưới dạng tài liệu. Ví dụ:{ sort: { "salary": 1 } } sắp xếp theo salary trường theo thứ tự tăng dần.

Ví dụ:giả sử chúng tôi tạo một bộ sưu tập có tên là employees với các tài liệu sau:

db.employees.insertMany([
    { _id: 1, name: "Sandy", salary: 55000 },
    { _id: 2, name: "Sarah", salary: 128000 },
    { _id: 3, name: "Fritz", salary: 25000 },
    { _id: 4, name: "Chris", salary: 45000 },
    { _id: 5, name: "Beck", salary: 82000 }
    ])

Chúng tôi có thể chạy mã sau để tìm tài liệu có mức lương dưới 60000, sau đó xóa tài liệu thấp nhất trong số các tài liệu đó.

db.employees.findOneAndDelete(
   { "salary": { $lt: 60000 } },
   {
       sort: { "salary": 1 }
    }
)

Kết quả:

{ "_id" : 3, "name" : "Fritz", "salary" : 25000 }

Đúng như dự đoán, nhân viên có mức lương thấp nhất đã bị xóa.

Đây là giao diện của các tài liệu bây giờ.

db.employees.find()

Kết quả:

{ "_id" : 1, "name" : "Sandy", "salary" : 55000 }
{ "_id" : 2, "name" : "Sarah", "salary" : 128000 }
{ "_id" : 4, "name" : "Chris", "salary" : 45000 }
{ "_id" : 5, "name" : "Beck", "salary" : 82000 }

Vì vậy, chúng ta có thể thấy rằng Fritz đã bị xóa.

Hãy hoàn nguyên nó về tài liệu ban đầu.

db.employees.remove({})
db.employees.insertMany([
    { _id: 1, name: "Sandy", salary: 55000 },
    { _id: 2, name: "Sarah", salary: 128000 },
    { _id: 3, name: "Fritz", salary: 25000 },
    { _id: 4, name: "Chris", salary: 45000 },
    { _id: 5, name: "Beck", salary: 82000 }
    ])

Bây giờ chúng ta hãy chạy cùng một findOneAndDelete() mã lại, nhưng lần này chúng tôi sẽ sắp xếp nó theo thứ tự giảm dần.

db.employees.findOneAndDelete(
   { "salary": { $lt: 60000 } },
   {
       sort: { "salary": -1 }
    }
)

Kết quả:

{ "_id" : 1, "name" : "Sandy", "salary" : 55000 }

Lần này Sandy đã bị xóa.

Hãy kiểm tra lại bộ sưu tập.

db.employees.find()

Kết quả:

{ "_id" : 2, "name" : "Sarah", "salary" : 128000 }
{ "_id" : 3, "name" : "Fritz", "salary" : 25000 }
{ "_id" : 4, "name" : "Chris", "salary" : 45000 }
{ "_id" : 5, "name" : "Beck", "salary" : 82000 }

Theo dự kiến, Sandy không còn trong bộ sưu tập.

Thông tin thêm

db.collection.findOneAndDelete() phương thức cũng chấp nhận các tham số khác, chẳng hạn như projection (để chỉ định một tập hợp con các trường cần trả về), maxTimeMScollation .

Xem tài liệu MongoDB để biết thêm thông tin.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Chỉ mục tài liệu con trong mongo

  2. 7 cách để kiểm tra phiên bản MongoDB của bạn

  3. Tính giá trị trung bình của các trường trong mảng / tài liệu được nhúng

  4. Sắp xếp MongoDB

  5. Giới thiệu về kiểu dữ liệu MongoDB