Встроенный документ MongoDB с использованием пружинной загрузки - PullRequest
1 голос
/ 01 апреля 2020

но хорошо в весенней загрузке. Я хочу использовать операции CRUD во встроенном документе. Я старался изо всех сил с Spring boot, но сегодня не повезло. Структура, которую я попробовал, приведена ниже. Мне нужно обновить категорию 2, удалить категорию 3 и, наконец, добавить новую категорию.

Документ

@Document(collection="reel")
public class Reel{

    @Id
    private ObjectId _id;
    private String name;
    List<Category> category;

    // No arg & arg constructoe, getters and setters
}


// I haven't use @Document
public class category{

    ptivate ObjectId _id=new ObjectId();
    private String categoryName;
    private String type;

    // No arg & arg constructoe, getters and setters
}

Структура, которая у меня есть,

{
  "_id": {
    "$oid": "5e8426717a16fb5b755edebd"
  },
  "name": "Name",
  "category": [
    {
      "_id": {
        "$oid": "5e8453c88056df756a242cd8"
      },
      "categoryName": "category 1",
      "type": "type 1"
    },
    {
      "_id": {
        "$oid": "5e8453c88056df756a242csd8"
      },
      "categoryName": "category 2",
      "type": "type 2"
    },
    {
      "_id": {
        "$oid": "5e8453c8805sd756a242cd8"
      },
      "categoryName": "category 3",
      "type": "type 3"
    }
  ],
  "_class": "com.videoappservice.model.Reel"
}

Что бы я ни пытался обновить,

 public Category updateReelCategoryById(ObjectId id, String categoryName, String categoryType) {

    // Here I pass ID of category
    Query query=new Query().addCriteria(Criteria.where("_id").is(id));
    Update update= new Update()
       .set("reel.category.type",categoryType)
       .set("reel.category.categoryName",categoryName);

    Category result=mongoTemplate.findAndModify(query,update, Category.class);
    return result;
}

Заранее спасибо. Пожалуйста, дайте мне знать, правильно ли моё моделирование

1 Ответ

1 голос
/ 02 апреля 2020

Вы хорошо постарались ... Ниже приведены небольшие исправления.

Query query=new Query().addCriteria(Criteria.where("category").elemMatch(Criteria.where("_id").is(id)));

Update update = new Update() 
    .set("category.$.type", categoryType)
    .set("category.$.description", categoryDescription);
UpdateResult result = mongoTemplate.updateFirst(query, update, Reel.class);
...