Findandmodify hoạt động như thế nào trong mongodb?

trong hướng dẫn này, tôi sẽ giải thích cách sử dụng các hàm findOneAndUpdate() và findAndModify() trong MongoDB

Cả hai hàm findOneAndUpdate() và findAndModify() đều thực hiện thao tác tìm và cập nhật bên trong vỏ mongo

Hướng dẫn này nhằm mục đích cung cấp cho người đọc các ví dụ để minh họa việc sử dụng hai

Cú pháp cho hàm findOneAndUpdate() và findAndModify()

Chúng ta hãy xem nhanh các cú pháp cho cả hai chức năng bên dưới

1. findOneAndUpdate()

db.collection.findOneAndUpdate( filter, update, options )

2. findAndModify()

db.collection.findAndModify(document)

Sử dụng Hàm findOneAndUpdate() và findAndModify()

Bây giờ chúng ta hãy bắt đầu bằng cách xem xét một số ví dụ cho cả hai chức năng trong MongoDB bên trong vỏ mongo. Dưới đây là bộ sưu tập mà tôi sẽ sử dụng cho hướng dẫn hôm nay

{
        "_id" : ObjectId("602eb6c728ff814b64eb3411"),
        "name" : "Stephanie",
        "age" : 22,
        "breed" : "Persian Cat",
        "personality" : {
                "dogFriendly" : true,
                "childFriendly" : true
        },
        "moreDetails" : {
                "cost" : 30000,
                "adoptionDate" : "30th May, 2021"
        },
        "likes" : [
                "fish",
                "milk",
                "chicken",
                "blankets"
        ]
}
{
        "_id" : ObjectId("602eb73728ff814b64eb3412"),
        "name" : "Whiskers",
        "age" : 4,
        "breed" : "Scottish Fold",
        "personality" : {
                "dogFriendly" : false,
                "childFriendly" : true
        },
        "moreDetails" : {
                "cost" : 30000,
                "adoptionDate" : "5th Mar, 2021"
        },
        "likes" : [
                "fish",
                "milk",
                "chicken",
                "blankets"
        ]
}
{
        "_id" : ObjectId("602eb84628ff814b64eb3413"),
        "name" : "Krissy",
        "age" : 6,
        "breed" : "Turkish Angora",
        "personality" : {
                "dogFriendly" : true,
                "childFriendly" : false
        },
        "moreDetails" : {
                "cost" : 30000,
                "adoptionDate" : "12th Dec, 2021"
        },
        "likes" : [
                "fish",
                "milk",
                "chicken",
                "blankets"
        ]
}
{
        "_id" : ObjectId("602ebc5ea78db75e09057cd0"),
        "name" : "Cassy",
        "age" : 16,
        "breed" : "Japanese Angora",
        "personality" : {
                "dogFriendly" : true,
                "childFriendly" : false
        },
        "moreDetails" : {
                "cost" : 30000,
                "adoptionDate" : "26th Jul, 2021"
        },
        "likes" : [
                "fish",
                "milk",
                "chicken",
                "blankets"
        ]
}
{
        "_id" : ObjectId("602ebc9da78db75e09057cd1"),
        "name" : "Shane",
        "age" : 11,
        "breed" : "Bobtail",
        "personality" : {
                "dogFriendly" : false,
                "childFriendly" : false
        },
        "moreDetails" : {
                "cost" : 30000,
                "adoptionDate" : "16th Sep, 2021"
        },
        "likes" : [
                "fish",
                "milk",
                "chicken",
                "blankets"
        ]
}
{
        "_id" : ObjectId("602ebed7a78db75e09057cd2"),
        "name" : "Phoebe",
        "age" : 21,
        "breed" : "Bobtail",
        "personality" : {
                "dogFriendly" : false,
                "childFriendly" : false
        },
        "moreDetails" : {
                "cost" : 30000,
                "adoptionDate" : "20th Jan, 2021"
        },
        "likes" : [
                "fish",
                "milk",
                "chicken",
                "blankets"
        ]
}

Hoạt động trên các trường giá trị chuỗi bằng cách sử dụng các hàm findOneAndUpdate() và findAndModify()

Trong ví dụ này, tôi sẽ sử dụng cả hai hàm trên các trường chuỗi và hiển thị chúng dưới dạng các ví dụ khác nhau – tất nhiên

Sử dụng findOneAndUpdate()

Giả sử Stephanie được nhận nuôi và chủ nhân của cô ấy đã đổi tên cô ấy thành Renee

> db.cats.findOneAndUpdate({"name": "Stephanie"}, { $set: {"name": "Renee" }})
{
        "_id" : ObjectId("602eb6c728ff814b64eb3411"),
        "name" : "Stephanie",
        "age" : 22,
        "breed" : "Persian Cat",
        "personality" : {
                "dogFriendly" : true,
                "childFriendly" : true
        },
        "moreDetails" : {
                "cost" : 30000,
                "adoptionDate" : "30th May, 2021"
        },
        "likes" : [
                "fish",
                "milk",
                "chicken",
                "blankets"
        ]
}

Bạn hẳn đã nhận thấy rằng hàm findOneAndUpdate() ngay lập tức trả về các tài liệu đã chọn ở dạng không thay đổi. Hãy để chúng tôi xem nếu một con mèo tên Renee tồn tại

> db.cats.findOne({"name": "Renee"})
{
        "_id" : ObjectId("602eb6c728ff814b64eb3411"),
        "name" : "Renee",
        "age" : 22,
        "breed" : "Persian Cat",
        "personality" : {
                "dogFriendly" : true,
                "childFriendly" : true
        },
        "moreDetails" : {
                "cost" : 30000,
                "adoptionDate" : "30th May, 2021"
        },
        "likes" : [
                "fish",
                "milk",
                "chicken",
                "blankets"
        ]
}

Và nó làm

Sử dụng findAndModify()

Giả sử chúng ta đặt nhầm giống mèo Bobtail thay vì Exotic Shorthair. Hãy nhớ rằng, hàm findAndModify() chỉ cập nhật tài liệu đầu tiên phù hợp với truy vấn

> db.cats.findAndModify(
..    {
..      query: { breed: "Bobtail" },
..      update: { $set: { breed: "Exotic Shorthair" } }
..    }
.. )
{
        "_id" : ObjectId("602ebc9da78db75e09057cd1"),
        "name" : "Shane",
        "age" : 11,
        "breed" : "Bobtail",
        "personality" : {
                "dogFriendly" : false,
                "childFriendly" : false
        },
        "moreDetails" : {
                "cost" : 30000,
                "adoptionDate" : "16th Sep, 2021"
        },
        "likes" : [
                "fish",
                "milk",
                "chicken",
                "blankets"
        ]
}

Chúng tôi lại nhận được phiên bản chưa sửa đổi của tài liệu. Để trả về với các giá trị được cập nhật, hãy chuyển tùy chọn mới thành true. Hãy để chúng tôi thử và đồng thời kiểm tra xem tài liệu có được cập nhật hay không. Chúng tôi sẽ làm điều này cho Bobtail khác mà chúng tôi có – Phoebe

> db.cats.findAndModify(
..    {
..      query: { breed: "Bobtail" },
..      update: { $set: { breed: "American Shorthair" } },
..      new: true
..    }
.. )
{
        "_id" : ObjectId("602ebed7a78db75e09057cd2"),
        "name" : "Phoebe",
        "age" : 21,
        "breed" : "American Shorthair",
        "personality" : {
                "dogFriendly" : false,
                "childFriendly" : false
        },
        "moreDetails" : {
                "cost" : 30000,
                "adoptionDate" : "20th Jan, 2021"
        },
        "likes" : [
                "fish",
                "milk",
                "chicken",
                "blankets"
        ]
}

Tuyệt quá. Chúng tôi đã được trả về giá trị cập nhật bởi chức năng

Thao tác trên các tài liệu được nhúng bằng các hàm findOneAndUpdate() và findAndModify()

Trong ví dụ này, tôi sẽ sử dụng cả hai chức năng và thao tác trên một tài liệu nhúng

Sử dụng findOneAndUpdate()

Giả sử giờ đây Whiskers đã hòa thuận với chó và chúng ta không còn muốn tố cáo anh ta vì không phải là một chú mèo con thân thiện với chó nữa. Chúng tôi sẽ ký hiệu dấu chấm để truy cập các trường tài liệu được nhúng này

Tùy chọn nào nên được sử dụng với lệnh findAndModify() để trả lại tài liệu đã sửa đổi thay vì tài liệu sửa đổi trước *?

Định nghĩa. Lệnh findAndModify sửa đổi và trả về một tài liệu. Theo mặc định, tài liệu được trả lại không bao gồm các sửa đổi được thực hiện trên bản cập nhật. Để trả lại tài liệu với các sửa đổi được thực hiện trong bản cập nhật, hãy sử dụng tùy chọn mới .

Làm cách nào để tìm và cập nhật dữ liệu trong MongoDB?

Trình vỏ MongoDB cung cấp các phương thức sau để cập nhật tài liệu trong bộ sưu tập. .
Để cập nhật một tài liệu, hãy sử dụng db. thu thập. cập nhậtOne()
Để cập nhật nhiều tài liệu, hãy sử dụng db. thu thập. cập nhậtMany()
Để thay thế một tài liệu, hãy sử dụng db. thu thập. thay thếOne()

Upsert hoạt động như thế nào trong MongoDB?

Hay nói cách khác, upsert là sự kết hợp giữa cập nhật và chèn (cập nhật + chèn = upsert) . Nếu giá trị của tùy chọn này được đặt thành true và tài liệu hoặc các tài liệu được tìm thấy khớp với truy vấn đã chỉ định, thì thao tác cập nhật sẽ cập nhật tài liệu hoặc các tài liệu phù hợp.

Làm cách nào để cập nhật dữ liệu trong MongoDB bằng nút JS?

Bạn có thể cập nhật một bản ghi hoặc tài liệu như nó được gọi trong MongoDB, bằng cách sử dụng phương thức updateOne() . Tham số đầu tiên của phương thức updateOne() là một đối tượng truy vấn xác định tài liệu nào sẽ cập nhật. Ghi chú. Nếu truy vấn tìm thấy nhiều bản ghi, thì chỉ bản ghi đầu tiên được cập nhật.