Java mongo查询以在只知道父元素时获取子元素
编辑 我想在只有父元素已知的情况下查找子元素。 我不能使用equest(我使用的是mongodb) 结构如下:Java mongo查询以在只知道父元素时获取子元素,java,mongodb,spring-data-mongodb,Java,Mongodb,Spring Data Mongodb,编辑 我想在只有父元素已知的情况下查找子元素。 我不能使用equest(我使用的是mongodb) 结构如下: collection: parent2 parent1 id: idParent1 name : parentName1 //no ref to the children elements parent2 id: idParent2 name : parentName2 //no ref to the children elements paren
collection: parent2
parent1
id: idParent1 name : parentName1 //no ref to the children elements
parent2
id: idParent2 name : parentName2 //no ref to the children elements
parent3
id: idParent3 name : parentName3 //no ref to the children elements
collection: children
child1
id: idChild1 refParent: parent1
id: idChild2 refParent: parent2
id: idChild3 refParent: parent3
id: idChild4 refParent: parent3
id: idChild5 refParent: parent1
请求将类似于
Query query = new Query();
query.addCriteria(Criteria.where("child.refParent").is("parent1")); //not working
return mongoTemplate.find(query, Chidren.class);
我用于创建集合的java类有:
public Parent{
String id;
String name;
}
public Child {
String id;
String name;
Parent parent;
}
您的java类与结构不同 根据结构:集合名称“child”不应是where条件的一部分,请使用:
query.addCriteria(Criteria.where("refParent").is("parent1"));
基于Java代码:
query.addCriteria(Criteria.where("parent.id").is("parent1"));
有关更多详细信息,请参见参考文档中的示例:
但你真的把整个父母都储存在每个孩子身上吗?这绝对不是在文档数据库中建模数据的正确方法。你应该做的是
public Child {
String id;
String name;
String parentId;
}
或者使用DBRef,但前提是您有很好的理由。您能否同时显示父文档和子文档的示例?您使用DBRef吗?idParent1是字符串还是对象ID?如果稍后将查询更改为
.is(新ObjectId(“idParent1”)
我不使用DBRef,我实际上使用对象父对象,以便消除混淆,我将idParent1更改为parent1