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

Phần tử mảng cập nhật tài liệu MongoDB sử dụng phương thức findOneAndUpdate trong Java

Bạn phải sử dụng Bộ lọc mảng để cập nhật một phần tử mảng cụ thể (với một điều kiện). Bộ lọc mảng trong Java được xác định bằng FindOneAndUpdateOptions đối tượng.

List<Bson> arrFilters = new ArrayList<>();
arrFilters.add(new Document("elem.apn", "abcdef")); // this specifies the element search criteria
FindOneAndUpdateOptions updateOptions = new FindOneAndUpdateOptions().arrayFilters(arrFilters);

String [] dArray = { "app", "ban", "ora" }; // the "d" array to be added
Bson update = set("session.ps.$[elem].d", Arrays.asList(dArray));

String idStr = "5e37dc262f5ff4dfc935eb6b";
Bson queryFilter = eq("_id", new ObjectId(idStr));

Document result = coll.findOneAndUpdate(queryFilter, update, updateOptions);
System.out.println(result);

Thao tác cập nhật tương tự trong Mongo Shell:

var dArray = [ "app", "ban" ];

db.test.updateOne(
   { _id: ObjectId("5e37dc262f5ff4dfc935eb6b") }, 
   { $set: { "session.ps.$[elem].d" : dArray } },
   {
     arrayFilters: [ { "elem.apn": "abcdef" } ]
   }
)


[CHỈNH SỬA THÊM]

Đang cập nhật apn đồng thời với giá trị mới "newVal" thêm một phần tử chuỗi mới "gua" vào d mảng (điều này sẽ thêm một mảng mới nếu mảng không tồn tại):

db.test.updateOne(
   { _id: ObjectId("5e37dc262f5ff4dfc935eb6b") }, 
   { 
     $set: { "session.ps.$[elem].apn": "newVal" }
     $push: { "session.ps.$[elem].d" : "gua" } 
   },
   {
     arrayFilters: [ { "elem.apn": "abcdef" } ]
   }
)

Mã Java cho mã Mongo Shell ở trên:

List<Bson> arrayFilters = new ArrayList<>();
arrayFilters.add(new Document("elem.apn", "abcdef"));
FindOneAndUpdateOptions updateOptions = 
    new FindOneAndUpdateOptions().arrayFilters(arrayFilters);   

Bson pushUpdate = push("session.ps.$[elem].d", "gua");
Bson setUpdate = set("session.ps.$[elem].apn", "newValue");
Bson update = combine(pushUpdate, setUpdate);

String idStr = "5e37dc262f5ff4dfc935eb6b";
Bson queryFilter = eq("_id", new ObjectId(idStr));

Document result = coll.findOneAndUpdate(queryFilter, update, updateOptions);



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongoose tổng hợp cách ánh xạ nhiều bộ sưu tập vào một Mảng

  2. (nút:71307) [DEP0079] DeprecationWarning

  3. Không thể gắn các chia sẻ tệp azure dưới dạng khối lượng mongodb trong các trường hợp vùng chứa azure

  4. ObjectID không được xác định. Không thể tìm thấy đối tượng theo id trong Mongo Shell

  5. Truy vấn danh sách tất cả các trường riêng biệt trong bộ sưu tập MongoDB