Hướng dẫn dùng mgo upsert trong PHP

Trong MongoDB, upsert là một phương thức được sử dụng để chèn và cập nhật giá trị trong bất kỳ thao tác nào. Nói cách khác, phương thức upsert MongoDB là sự kết hợp giữa chèn và cập nhật [insert + update = upsert]. Theo mặc định, giá trị của phương thức upert luôn là false. Nếu Document khớp với truy vấn được chỉ định và giá trị của phương thức được đặt thành true, thì thao tác cập nhật sẽ cập nhật các Document phù hợp. Nếu Document không khớp với truy vấn đã chỉ định và giá trị của phương thức được đặt thành true, phương pháp này sẽ chèn một Document mới vào Collection. Document mới này chứa các trường cho biết hoạt động.

Các bài viết liên quan:

Cú pháp:

Giá trị của tùy chọn upert sẽ là true hoặc false.

Upsert với hàm findAndModify []:

Người dùng có thể sử dụng tùy chọn upert kết hợp với hàm findAndModify []. Trong hàm này, giá trị mặc định của tùy chọn là false. Nếu giá trị của tùy chọn này được đặt thành true, hàm sẽ thực hiện một trong các hoạt động sau:

Nếu tìm thấy Document phù hợp với tiêu chí truy vấn đã cho, hàm findAndModify [] sẽ cập nhật Document.

Nếu không có Document nào phù hợp với tiêu chí truy vấn đã cho, thì hàm findAndModify [] sẽ chèn một Document mới vào Collection.

Cú pháp:

db.Collection_name.findAndModify[  
{  
    selection_criteria:,  
    sort: ,  
    remove: ,  
    update: ,  
    new: ,  
    fields: ,  
    upsert: ,  
    bypassDocumentValidation: ,  
    writeConcern: ,  
    collation: ,  
    arrayFilters: [ , ? ]  
}]  

Ví dụ:

Trong ví dụ này, chúng tôi đang làm việc với

  • Cơ sở dữ liệu: testDB
  • Collection: sinh viên
  • Cơ sở dữ liệu: ba Document chứa thông tin chi tiết về sinh viên

db.student.find[].pretty[]  
{  
          "_id" : ObjectID["60353f44f196547db6325eb32"],  
          "std_name" : "Jhon",  
          "address" : "England"  
          "passout" : 2018  
}  
{  
          "_id" : ObjectID["60353f44f196547db6325eb33"],  
          "std_name" : "Mike",  
          "address" : "Japan"  
          "passout" : 2019  
}  
{  
          "_id" : ObjectID["60353f44f196547db6325eb34"],  
          "std_name" : "Sam",  
          "address" : "Australia"  
          "passout" : 2016  
}  

Bây giờ chúng ta sẽ chèn một Document mới vào Collection sinh viên bằng cách đặt tùy chọn upert thành true.

db.student.findAndModify[{query:{name:"Jack"},   
                            update:{$set:{address:"Australia"}},  
                            upsert:true}]  

Ở đây, không có dữ liệu nào khớp với tên “jack”, do đó, hàm findAndModify [] sẽ chèn một Document mới có chứa hai trường [tức là “tên” và “địa chỉ”] vì giá trị của phương thức upsert được đặt thành true.

Upsert bằng hàm update []:

Bạn có thể sử dụng tùy chọn Upsert cùng với hàm update []. Trong hàm này, giá trị mặc định của tùy chọn là false. Nếu giá trị của tùy chọn này được đặt thành true, hàm sẽ thực hiện một trong các hoạt động sau:

Nếu tìm thấy một Document phù hợp với tiêu chí truy vấn đã cho, thì hàm update [] sẽ cập nhật Document đó.

Nếu không có Document nào phù hợp với tiêu chí truy vấn đã cho, thì hàm update [] sẽ chèn một Document mới vào Collection.

Cú pháp:

db.Collection_name.update[{Selection_criteria}, {$set : {Update_data}}, {  
     upsert : ,  
     multi : ,  
     writeConcern : ,  
     collation : ,  
     arrayFilters : [ , . . . ? ],  
     hint :            
   }]  

Ví dụ:

Trong ví dụ này, chúng tôi đang làm việc với

  • Cơ sở dữ liệu: testDB
  • Collection: sinh viên
  • Cơ sở dữ liệu: ba Document chứa thông tin chi tiết về sinh viên

db.student.find[].pretty[]  
{  
          "_id" : ObjectID["60353f44f196547db6325eb32"],  
          "std_name" : "Jhon",  
          "address" : "England"  
          "passout" : 2018  
}  
{  
          "_id" : ObjectID["60353f44f196547db6325eb33"],  
          "std_name" : "Mike",  
          "address" : "Japan"  
          "passout" : 2019  
}  
{  
          "_id" : ObjectID["60353f44f196547db6325eb34"],  
          "std_name" : "Sam",  
          "address" : "Australia"  
          "passout" : 2016  
}  

Bây giờ chúng ta sẽ chèn một Document mới vào Collection sinh viên bằng cách đặt tùy chọn upert thành true.

db.employee.update[{name:"Priya"}, {$set: {department: "HR"}},{upsert:true}]  

Ở đây, không có dữ liệu nào khớp với tên “Noah”, vì vậy hàm update [] sẽ chèn một Document mới có chứa hai trường [tức là “tên” và “địa chỉ”] vì giá trị của phương thức upsert được đặt thành true.

Upsert với Biểu thức toán tử:

Nếu Document không khớp với dữ liệu đã cho và giá trị của tùy chọn upert được đặt thành true, thì thao tác cập nhật sẽ tạo Document mới từ mệnh đề tương tự trong tham số truy vấn đã cho và áp dụng các biểu thức từ tham số được cập nhật.

Ví dụ:

Trong ví dụ này, chúng tôi đang làm việc

  • Cơ sở dữ liệu: testDB
  • Collection: nhân viên
  • Cơ sở dữ liệu: bốn Document chứa thông tin chi tiết về nhân viên

> db.employee.find[].pretty[]  
{  
              "_id" : ObjectID["60545245fa51254k5634hg412"]  
              "Employee_ID" : "125"  
              "Name" : "Nick"  
              "Phone Number" : "6267896546"  
}  
{  
              "_id" : ObjectID["60545245fa51254k5634hg413"]  
              "Employee_ID" : "129"  
              "Name" : "John pie"  
              "Phone Number" : "6965453164"  
}  
{  
              "_id" : ObjectID["60545245fa51254k5634hg414"]  
              "Employee_ID" : "135"  
              "Name" : "Jack"  
              "Phone Number" : "7516584359"  
}  
{  
              "_id" : ObjectID["60545245fa51254k5634hg415"]  
              "Employee_ID" : "140"  
              "Name" : "Thomas"  
              "Phone Number" : "9654778546"  
}  

Bây giờ chúng ta sẽ chèn một Document mới vào Collection Nhân viên bằng cách đặt giá trị của tùy chọn Upsert thành true.

db.employee.update[{Name: "Hnery"},   // Query parameter    
                  {$set: {Phone Number: '9654785423 '}, // Update document  
                   $setOnInsert: {Gender: 'Male'}},  
                  {upsert: true}]  

Tại đây, phương thức update [] tạo một Document mới với trường “Name: Hnery” từ điều kiện truy vấn và sau đó áp dụng các thao tác $ set và $ setOnInsert cho Document này.

Chủ Đề