MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Element tablicy aktualizacji dokumentów MongoDB przy użyciu metody findOneAndUpdate w Javie

Musisz użyć filtry tablicy aby zaktualizować określony element tablicy (z warunkiem). Filtry tablicowe w Javie są zdefiniowane za pomocą FindOneAndUpdateOptions obiekt.

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);

Ta sama operacja aktualizacji w Mongo Shell:

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

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


[EDYTUJ DODAJ]

Aktualizacja apn jednocześnie z nową wartością „newVal” i dodanie nowego elementu ciągu „gua” do d array (to doda nową tablicę, jeśli tablica nie istnieje):

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

Kod Java dla powyższego kodu Mongo Shell:

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. łączenie z bazą danych atlas mongo

  2. Mongodb zwraca wiele wyników podtablic i wyklucza inne zwrócone wyniki

  3. Jak stworzyć tailable kursor w powłoce MongoDB?

  4. MongoDB 2.1 Aggregate Framework Sum of Array Elements pasujących do nazwy

  5. Alternatywy mongoDB dla ograniczeń kluczy obcych