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