MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Елемент на масив за актуализиране на документ MongoDB с помощта на метода findOneAndUpdate в Java

Трябва да използвате arrayFilters за актуализиране на конкретен елемент от масив (с условие). Филтрите за масиви в Java се дефинират с FindOneAndUpdateOptions обект.

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

Същата операция за актуализиране в Mongo Shell:

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

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


[РЕДАКТИРАНЕ НА ДОБАВЯНЕ]

Актуализиране на apn едновременно с нова стойност "newVal" и добавяне на нов низов елемент "gua" към d масив (това ще добави нов масив, ако масивът не съществува):

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

Java кодът за горния код на 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. Вземете и добавете/актуализирайте многостепенен вграден/вложен MongoDB документ с помощта на C#

  2. mongolastic отнема много време за индексиране на колекция

  3. Node.js Споделяне на връзка на родния драйвер на Mongodb

  4. Може ли kafka да се свърже - изходният код на mongo се изпълнява като клъстер (max.tasks> 1)

  5. Как да използвам $regex в mongodb?