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

Sử dụng $addToSet nhiều lần trong cùng một cập nhật MongoDB

Có, hoàn toàn có thể sử dụng $addToSet nhiều lần trong cùng một lệnh cập nhật. Toán tử này thêm giá trị vào mảng chỉ khi giá trị đó chưa tồn tại.

Tạo collection mẫu:

> db.demo27.insertOne({"StudentDetails":{"101":{"Subject":["Java"]}}});
{ "acknowledged" : true, "insertedId" : ObjectId("5e15f9e822d07d3b95082e7f") }
> db.demo27.insertOne({"StudentDetails":{"101":{"Subject":["MySQL"]}}});
{ "acknowledged" : true, "insertedId" : ObjectId("5e15f9eb22d07d3b95082e80") }

Xem dữ liệu ban đầu:

> db.demo27.find().pretty();
{
  "_id" : ObjectId("5e15f9e822d07d3b95082e7f"),
  "StudentDetails" : { "101" : { "Subject" : [ "Java" ] } }
}
{
  "_id" : ObjectId("5e15f9eb22d07d3b95082e80"),
  "StudentDetails" : { "101" : { "Subject" : [ "MySQL" ] } }
}

Cập nhật thêm "MongoDB" vào mảng Subject của cả hai tài liệu (sử dụng update với upsert: true):

> db.demo27.update({}, {$addToSet: {"StudentDetails.101.Subject": "MongoDB"}}, {upsert: true})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Kết quả sau cập nhật:

> db.demo27.find().pretty();
{
  "_id" : ObjectId("5e15f9e822d07d3b95082e7f"),
  "StudentDetails" : { "101" : { "Subject" : [ "Java", "MongoDB" ] } }
}
{
  "_id" : ObjectId("5e15f9eb22d07d3b95082e80"),
  "StudentDetails" : { "101" : { "Subject" : [ "MySQL" ] } }
}

Chú ý: Lệnh update() mặc định chỉ cập nhật tài liệu đầu tiên khớp. Để cập nhật tất cả, thêm tùy chọn {multi: true} (phiên bản MongoDB < 4.0) hoặc sử dụng updateMany() (phiên bản mới hơn).