Java MongoClient для добавления нового встроенного документа

У меня есть тип данных ниже в mongodb

{
    "_id" : ObjectId("60007b3abc54b5305e9f5601"),
    "description" : "Mens",
    "name" : "Men"
}

Поскольку приведенные выше данные уже являются существующими данными, теперь, используя MongoClient, я хочу вставить новый встроенный документ на основе _id, как показано ниже.

{
    "_id" : ObjectId("60007b3abc54b5305e9f5601"),
    "description" : "Mens",
    "name" : "Men",
    "subCategory" : [{
        "name" : "This is name update",
        "description" : "This is update"
    }]
}

После того, как массив был вставлен, снова у меня есть требование добавить еще один элемент в массив, что-то вроде ниже

{
    "_id" : ObjectId("60007b3abc54b5305e9f5601"),
    "description" : "Mens",
    "name" : "Men",
    "subCategory" : [{
        "name" : "This is name update",
        "description" : "This is update"
    },
{
        "name" : "This is name update",
        "description" : "This is update"
    }]
}

person San Jaisy    schedule 23.01.2021    source источник


Ответы (1)


Код для обновления:

import static com.mongodb.client.model.Filters.eq;

MongoClient mongoClient = new MongoClient("localhost", 27017);
MongoDatabase database = mongoClient.getDatabase("some_db_name");
MongoCollection<Document> collection = database.getCollection("some_database");
Document document = collection.find(eq("_id", new ObjectId("60007b3abc54b5305e9f5601")))
                              .first();

Object object = document.get("subCategory");

List<Document> documents = new ArrayList<>();

if(object != null) {
  documents = (List<Document>) object;
}

documents.add(new Document("name", "This is name update")
              .append("description", "This is update")); 

document.append("subCategory", documents);

collection.updateOne(eq("_id", new ObjectId("60007b3abc54b5305e9f5601")), 
         new Document("$set", new Document("subCategory", documents)));

 

Прочтите документы: https://mongodb.github.io/mongo-java-driver/3.4/driver/getting-started/quick-start/

person Anish B.    schedule 23.01.2021
comment
document.get(subCategory) этот объект отсутствует в начале. Таким образом, List‹Document› documents = (List‹Document›) document.get(subCategory); не будет работать, если подкатегории нет - person San Jaisy; 23.01.2021
comment
@SanJaisy Теперь обновлено. Просто проверьте. - person Anish B.; 23.01.2021
comment
@SanJaisy Ты здесь? - person Anish B.; 23.01.2021