Java 添加、更新和删除嵌套在子文档下的子文档

Java 添加、更新和删除嵌套在子文档下的子文档,java,mongodb,spring-mvc,Java,Mongodb,Spring Mvc,下面是我的JSON数据结构 { "id": "54e73250fc670bf2068e88c1", "name": "abc", "subCategory": [ { "id": "54ec0c4ee4b036a9fa3767cd", "name": "pqr", "subCategory":[ { "

下面是我的JSON数据结构

{
    "id": "54e73250fc670bf2068e88c1",
    "name": "abc",
    "subCategory": [
        {
            "id": "54ec0c4ee4b036a9fa3767cd",
            "name": "pqr",
            "subCategory":[
                    {
                      "name":"abcd",
                       "subCategory":[
                          {
                           "name":"xyz"
                            "subCategory":[ 
                                    {
                                           ........
                                    }
                                  ]
                          }

               }
   ]

        },
        {
            "id": "54ec0c4ee4b036a9fa3767ce",
            "name": "xyz"
        },
        {
            "name": "abcde"
        },
        {
            "name": "abcde"
        },
        {
            "id": "54ec0c4be4b036a9fa3767ca",
            "name": "abcde"
        }
    ]
}
我在使用mongoDB和SpringMVC进行添加、更新和删除操作时遇到问题。 我确实问过 1.在子文档下添加文档

public void addGrandChildCategory(subCategory category, String parentId) {
    List<subCategory> subCategory = null;
    if (category.getSubCategory() == null) {
        category.setSubCategory(subCategory);
    }
    mongoTemplate.updateFirst(new Query(Criteria.where("subCategory._id")
            .is(new ObjectId(parentId))), new Update().push(
            "subCategory.subCategory", category), subCategory.class);
}
  • 对于删除,我已删除文档和子文档。对于n个嵌套级别,方法是否保持不变
  • 我的模型课程是:

    1-类别

    package com.cheasyy.cat;
    
    import java.util.List;
    
    import org.codehaus.jackson.annotate.JsonAutoDetect;
    import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility;
    import org.codehaus.jackson.map.annotate.JsonSerialize;
    import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion;
    import org.springframework.data.mongodb.core.mapping.Document;
    
    /**
     * Model class for category
     * 
     * @author Gaurav
     * 
     */
    @JsonAutoDetect(getterVisibility = Visibility.NONE, fieldVisibility =     Visibility.ANY)
    @JsonSerialize(include = Inclusion.NON_NULL)
    @Document(collection = "Category")
    public class CategoryStructure {
    private String id;
    
    
    
    private String name;
    private List<subCategory> subCategory;
    
    public String getId() {
        return id;
    }
    
    public void setId(String id) {
        this.id = id;
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public List<subCategory> getSubCategory() {
        return subCategory;
    }
    
    public void setSubCategory(List<subCategory> subCategory) {
        this.subCategory = subCategory;
    }
    
    
    
    }
    
    package com.cheasey.cat;
    导入java.util.List;
    导入org.codehaus.jackson.annotate.jsonautodect;
    导入org.codehaus.jackson.annotate.JsonAutoDetect.Visibility;
    导入org.codehaus.jackson.map.annotate.JsonSerialize;
    导入org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion;
    导入org.springframework.data.mongodb.core.mapping.Document;
    /**
    *类别的模型类
    * 
    *@作者高拉夫
    * 
    */
    @JsonAutoDetect(getServiceability=Visibility.NONE,fieldVisibility=Visibility.ANY)
    @JsonSerialize(include=Inclusion.NON_NULL)
    @文件(收集=“类别”)
    公共类类别结构{
    私有字符串id;
    私有字符串名称;
    私有列表子类别;
    公共字符串getId(){
    返回id;
    }
    公共无效集合id(字符串id){
    this.id=id;
    }
    公共字符串getName(){
    返回名称;
    }
    公共void集合名(字符串名){
    this.name=名称;
    }
    公共列表getSubCategory(){
    返回子类别;
    }
    公共无效集合子类别(列表子类别){
    this.subCategory=子类别;
    }
    }
    
    2-子类别

    package com.cheasyy.cat;
    
    import java.util.List;
    
    import org.bson.types.ObjectId;
    import org.codehaus.jackson.annotate.JsonAutoDetect;
    import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility;
    import org.codehaus.jackson.annotate.JsonIgnore;
    import org.codehaus.jackson.map.annotate.JsonSerialize;
    import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion;
    import org.springframework.data.mongodb.core.mapping.Document;
    
    @JsonAutoDetect(getterVisibility = Visibility.NONE, fieldVisibility =     Visibility.ANY)
    @JsonSerialize(include = Inclusion.NON_NULL)
    @Document(collection = "Category")
    /**
     * Model class for sub Category
     * @author Gaurav
     *
     */
    public class subCategory
    {
    private String id=new ObjectId().toString();
    
    private String name;
    
    private List<subCategory> subCategory;
    
    public String getId() {
        return id;
    }
    
    public void setId(String id) {
        this.id = id;
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public List<subCategory> getSubCategory() {
        return subCategory;
    }
    
    public void setSubCategory(List<subCategory> subCategory) {
        this.subCategory = subCategory;
    }
    
    
    
    
    }
    
    package com.cheasey.cat;
    导入java.util.List;
    导入org.bson.types.ObjectId;
    导入org.codehaus.jackson.annotate.jsonautodect;
    导入org.codehaus.jackson.annotate.JsonAutoDetect.Visibility;
    导入org.codehaus.jackson.annotate.JsonIgnore;
    导入org.codehaus.jackson.map.annotate.JsonSerialize;
    导入org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion;
    导入org.springframework.data.mongodb.core.mapping.Document;
    @JsonAutoDetect(getServiceability=Visibility.NONE,fieldVisibility=Visibility.ANY)
    @JsonSerialize(include=Inclusion.NON_NULL)
    @文件(收集=“类别”)
    /**
    *子类别的模型类
    *@作者高拉夫
    *
    */
    公共类子类别
    {
    私有字符串id=new ObjectId().toString();
    私有字符串名称;
    私有列表子类别;
    公共字符串getId(){
    返回id;
    }
    公共无效集合id(字符串id){
    this.id=id;
    }
    公共字符串getName(){
    返回名称;
    }
    公共void集合名(字符串名){
    this.name=名称;
    }
    公共列表getSubCategory(){
    返回子类别;
    }
    公共无效集合子类别(列表子类别){
    this.subCategory=子类别;
    }
    }
    
    您有没有在mongoshell中直接使用代码的情况下尝试过此功能?这通常能帮助我找出哪里出了错。我已经试过了,但并没有达到我犯错误的地方
    package com.cheasyy.cat;
    
    import java.util.List;
    
    import org.bson.types.ObjectId;
    import org.codehaus.jackson.annotate.JsonAutoDetect;
    import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility;
    import org.codehaus.jackson.annotate.JsonIgnore;
    import org.codehaus.jackson.map.annotate.JsonSerialize;
    import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion;
    import org.springframework.data.mongodb.core.mapping.Document;
    
    @JsonAutoDetect(getterVisibility = Visibility.NONE, fieldVisibility =     Visibility.ANY)
    @JsonSerialize(include = Inclusion.NON_NULL)
    @Document(collection = "Category")
    /**
     * Model class for sub Category
     * @author Gaurav
     *
     */
    public class subCategory
    {
    private String id=new ObjectId().toString();
    
    private String name;
    
    private List<subCategory> subCategory;
    
    public String getId() {
        return id;
    }
    
    public void setId(String id) {
        this.id = id;
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public List<subCategory> getSubCategory() {
        return subCategory;
    }
    
    public void setSubCategory(List<subCategory> subCategory) {
        this.subCategory = subCategory;
    }
    
    
    
    
    }