Java 如何在mongo中连接DBRef对象
嗨,我有我的第一个收藏Java 如何在mongo中连接DBRef对象,java,spring,mongodb,Java,Spring,Mongodb,嗨,我有我的第一个收藏 students { "name" : "abc" "class" : "1" "subjects" : DBRef("subjects","class1") } subjects { "_id" : "class1" "sub1" : "english" "sub2" : "physics" } 还有我的第二套 students { "name" : "abc" "class" : "1" "subjects" : DBRef
students
{
"name" : "abc"
"class" : "1"
"subjects" : DBRef("subjects","class1")
}
subjects
{
"_id" : "class1"
"sub1" : "english"
"sub2" : "physics"
}
还有我的第二套
students
{
"name" : "abc"
"class" : "1"
"subjects" : DBRef("subjects","class1")
}
subjects
{
"_id" : "class1"
"sub1" : "english"
"sub2" : "physics"
}
我希望通过加入上述两个集合来实现以下输出
{
"name" : "abc"
"class" : "1"
"subjects" : {sub1 : "english",sub2 : "physics"}
}
是否可能,如果是,如何进行?您可以使用
@DBRef
从学生
中引用主题
文档
映射框架不必存储嵌入的子对象
在文件中。您还可以单独存储它们并使用
DBRef引用该文档。从中加载对象时
MongoDB,这些参考资料将被急切地解决,您将得到
返回一个看起来与存储的对象相同的映射对象
嵌入到主控文档中
下面是一个使用DBRef引用特定文档的示例
独立于引用它的对象而存在的
(为了简洁起见,两个类都以直线形式显示):
编辑:-
@Document(collection = "students")
public class Students implements Serializable, BaseDocument {
private static final long serialVersionUID = -3534650012619938612L;
@Id
private String id;
@Field("class")
private String className;
@DBRef
@Field("subjects")
private Subject subject;
public String getId() {
return id;
}
public String getClassName() {
return className;
}
public void setId(String id) {
this.id = id;
}
public void setClassName(String className) {
this.className = className;
}
public Subject getSubject() {
return subject;
}
public void setSubject(Subject subject) {
this.subject = subject;
}
@Override
public String toString() {
return "Students [id=" + id + ", className=" + className + ", subject=" + subject + "]";
}
}
@Document(collection = "subjects")
public class Subject implements Serializable, BaseDocument {
private static final long serialVersionUID = -3534650012619938612L;
@Id
private String id;
private String sub1;
private String sub2;
public String getId() {
return id;
}
public String getSub1() {
return sub1;
}
public String getSub2() {
return sub2;
}
public void setId(String id) {
this.id = id;
}
public void setSub1(String sub1) {
this.sub1 = sub1;
}
public void setSub2(String sub2) {
this.sub2 = sub2;
}
@Override
public String toString() {
return "Subject [id=" + id + ", sub1=" + sub1 + ", sub2=" + sub2 + "]";
}
}
Students [id=584ea66e9e53b7802651de36, className=1, subject=Subject [id=class1, sub1=english, sub2=physics]]
{
"_id" : "class1",
"sub1" : "english",
"sub2" : "physics"
}
{
"_id" : ObjectId("584ea66e9e53b7802651de36"),
"name" : "abc",
"class" : "1",
"subjects" : {
"$ref" : "subjects",
"$id" : "class1",
"$db" : "localhost"
}
}
实际上,为了给您提供更多细节,@DBRef
注释将急切地加载数据(即本例中的主题)
学生示范班:-
@Document(collection = "students")
public class Students implements Serializable, BaseDocument {
private static final long serialVersionUID = -3534650012619938612L;
@Id
private String id;
@Field("class")
private String className;
@DBRef
@Field("subjects")
private Subject subject;
public String getId() {
return id;
}
public String getClassName() {
return className;
}
public void setId(String id) {
this.id = id;
}
public void setClassName(String className) {
this.className = className;
}
public Subject getSubject() {
return subject;
}
public void setSubject(Subject subject) {
this.subject = subject;
}
@Override
public String toString() {
return "Students [id=" + id + ", className=" + className + ", subject=" + subject + "]";
}
}
@Document(collection = "subjects")
public class Subject implements Serializable, BaseDocument {
private static final long serialVersionUID = -3534650012619938612L;
@Id
private String id;
private String sub1;
private String sub2;
public String getId() {
return id;
}
public String getSub1() {
return sub1;
}
public String getSub2() {
return sub2;
}
public void setId(String id) {
this.id = id;
}
public void setSub1(String sub1) {
this.sub1 = sub1;
}
public void setSub2(String sub2) {
this.sub2 = sub2;
}
@Override
public String toString() {
return "Subject [id=" + id + ", sub1=" + sub1 + ", sub2=" + sub2 + "]";
}
}
Students [id=584ea66e9e53b7802651de36, className=1, subject=Subject [id=class1, sub1=english, sub2=physics]]
{
"_id" : "class1",
"sub1" : "english",
"sub2" : "physics"
}
{
"_id" : ObjectId("584ea66e9e53b7802651de36"),
"name" : "abc",
"class" : "1",
"subjects" : {
"$ref" : "subjects",
"$id" : "class1",
"$db" : "localhost"
}
}
科目模型班:-
@Document(collection = "students")
public class Students implements Serializable, BaseDocument {
private static final long serialVersionUID = -3534650012619938612L;
@Id
private String id;
@Field("class")
private String className;
@DBRef
@Field("subjects")
private Subject subject;
public String getId() {
return id;
}
public String getClassName() {
return className;
}
public void setId(String id) {
this.id = id;
}
public void setClassName(String className) {
this.className = className;
}
public Subject getSubject() {
return subject;
}
public void setSubject(Subject subject) {
this.subject = subject;
}
@Override
public String toString() {
return "Students [id=" + id + ", className=" + className + ", subject=" + subject + "]";
}
}
@Document(collection = "subjects")
public class Subject implements Serializable, BaseDocument {
private static final long serialVersionUID = -3534650012619938612L;
@Id
private String id;
private String sub1;
private String sub2;
public String getId() {
return id;
}
public String getSub1() {
return sub1;
}
public String getSub2() {
return sub2;
}
public void setId(String id) {
this.id = id;
}
public void setSub1(String sub1) {
this.sub1 = sub1;
}
public void setSub2(String sub2) {
this.sub2 = sub2;
}
@Override
public String toString() {
return "Subject [id=" + id + ", sub1=" + sub1 + ", sub2=" + sub2 + "]";
}
}
Students [id=584ea66e9e53b7802651de36, className=1, subject=Subject [id=class1, sub1=english, sub2=physics]]
{
"_id" : "class1",
"sub1" : "english",
"sub2" : "physics"
}
{
"_id" : ObjectId("584ea66e9e53b7802651de36"),
"name" : "abc",
"class" : "1",
"subjects" : {
"$ref" : "subjects",
"$id" : "class1",
"$db" : "localhost"
}
}
通过Id获取学生:-
@Document(collection = "students")
public class Students implements Serializable, BaseDocument {
private static final long serialVersionUID = -3534650012619938612L;
@Id
private String id;
@Field("class")
private String className;
@DBRef
@Field("subjects")
private Subject subject;
public String getId() {
return id;
}
public String getClassName() {
return className;
}
public void setId(String id) {
this.id = id;
}
public void setClassName(String className) {
this.className = className;
}
public Subject getSubject() {
return subject;
}
public void setSubject(Subject subject) {
this.subject = subject;
}
@Override
public String toString() {
return "Students [id=" + id + ", className=" + className + ", subject=" + subject + "]";
}
}
@Document(collection = "subjects")
public class Subject implements Serializable, BaseDocument {
private static final long serialVersionUID = -3534650012619938612L;
@Id
private String id;
private String sub1;
private String sub2;
public String getId() {
return id;
}
public String getSub1() {
return sub1;
}
public String getSub2() {
return sub2;
}
public void setId(String id) {
this.id = id;
}
public void setSub1(String sub1) {
this.sub1 = sub1;
}
public void setSub2(String sub2) {
this.sub2 = sub2;
}
@Override
public String toString() {
return "Subject [id=" + id + ", sub1=" + sub1 + ", sub2=" + sub2 + "]";
}
}
Students [id=584ea66e9e53b7802651de36, className=1, subject=Subject [id=class1, sub1=english, sub2=physics]]
{
"_id" : "class1",
"sub1" : "english",
"sub2" : "physics"
}
{
"_id" : ObjectId("584ea66e9e53b7802651de36"),
"name" : "abc",
"class" : "1",
"subjects" : {
"$ref" : "subjects",
"$id" : "class1",
"$db" : "localhost"
}
}
当您通过Id获取学生时,framework/mongodb将自动加载主题数据。您不需要专门执行join来获取主题数据
public Students getStudents(String id) {
MongoOperations mongoOperations = getMongoConnection();
Students students = mongoOperations.findById(id, Students.class);
System.out.println(students.toString());
return students;
}
输出:-
@Document(collection = "students")
public class Students implements Serializable, BaseDocument {
private static final long serialVersionUID = -3534650012619938612L;
@Id
private String id;
@Field("class")
private String className;
@DBRef
@Field("subjects")
private Subject subject;
public String getId() {
return id;
}
public String getClassName() {
return className;
}
public void setId(String id) {
this.id = id;
}
public void setClassName(String className) {
this.className = className;
}
public Subject getSubject() {
return subject;
}
public void setSubject(Subject subject) {
this.subject = subject;
}
@Override
public String toString() {
return "Students [id=" + id + ", className=" + className + ", subject=" + subject + "]";
}
}
@Document(collection = "subjects")
public class Subject implements Serializable, BaseDocument {
private static final long serialVersionUID = -3534650012619938612L;
@Id
private String id;
private String sub1;
private String sub2;
public String getId() {
return id;
}
public String getSub1() {
return sub1;
}
public String getSub2() {
return sub2;
}
public void setId(String id) {
this.id = id;
}
public void setSub1(String sub1) {
this.sub1 = sub1;
}
public void setSub2(String sub2) {
this.sub2 = sub2;
}
@Override
public String toString() {
return "Subject [id=" + id + ", sub1=" + sub1 + ", sub2=" + sub2 + "]";
}
}
Students [id=584ea66e9e53b7802651de36, className=1, subject=Subject [id=class1, sub1=english, sub2=physics]]
{
"_id" : "class1",
"sub1" : "english",
"sub2" : "physics"
}
{
"_id" : ObjectId("584ea66e9e53b7802651de36"),
"name" : "abc",
"class" : "1",
"subjects" : {
"$ref" : "subjects",
"$id" : "class1",
"$db" : "localhost"
}
}
主题集合:-
@Document(collection = "students")
public class Students implements Serializable, BaseDocument {
private static final long serialVersionUID = -3534650012619938612L;
@Id
private String id;
@Field("class")
private String className;
@DBRef
@Field("subjects")
private Subject subject;
public String getId() {
return id;
}
public String getClassName() {
return className;
}
public void setId(String id) {
this.id = id;
}
public void setClassName(String className) {
this.className = className;
}
public Subject getSubject() {
return subject;
}
public void setSubject(Subject subject) {
this.subject = subject;
}
@Override
public String toString() {
return "Students [id=" + id + ", className=" + className + ", subject=" + subject + "]";
}
}
@Document(collection = "subjects")
public class Subject implements Serializable, BaseDocument {
private static final long serialVersionUID = -3534650012619938612L;
@Id
private String id;
private String sub1;
private String sub2;
public String getId() {
return id;
}
public String getSub1() {
return sub1;
}
public String getSub2() {
return sub2;
}
public void setId(String id) {
this.id = id;
}
public void setSub1(String sub1) {
this.sub1 = sub1;
}
public void setSub2(String sub2) {
this.sub2 = sub2;
}
@Override
public String toString() {
return "Subject [id=" + id + ", sub1=" + sub1 + ", sub2=" + sub2 + "]";
}
}
Students [id=584ea66e9e53b7802651de36, className=1, subject=Subject [id=class1, sub1=english, sub2=physics]]
{
"_id" : "class1",
"sub1" : "english",
"sub2" : "physics"
}
{
"_id" : ObjectId("584ea66e9e53b7802651de36"),
"name" : "abc",
"class" : "1",
"subjects" : {
"$ref" : "subjects",
"$id" : "class1",
"$db" : "localhost"
}
}
学生收藏:-
@Document(collection = "students")
public class Students implements Serializable, BaseDocument {
private static final long serialVersionUID = -3534650012619938612L;
@Id
private String id;
@Field("class")
private String className;
@DBRef
@Field("subjects")
private Subject subject;
public String getId() {
return id;
}
public String getClassName() {
return className;
}
public void setId(String id) {
this.id = id;
}
public void setClassName(String className) {
this.className = className;
}
public Subject getSubject() {
return subject;
}
public void setSubject(Subject subject) {
this.subject = subject;
}
@Override
public String toString() {
return "Students [id=" + id + ", className=" + className + ", subject=" + subject + "]";
}
}
@Document(collection = "subjects")
public class Subject implements Serializable, BaseDocument {
private static final long serialVersionUID = -3534650012619938612L;
@Id
private String id;
private String sub1;
private String sub2;
public String getId() {
return id;
}
public String getSub1() {
return sub1;
}
public String getSub2() {
return sub2;
}
public void setId(String id) {
this.id = id;
}
public void setSub1(String sub1) {
this.sub1 = sub1;
}
public void setSub2(String sub2) {
this.sub2 = sub2;
}
@Override
public String toString() {
return "Subject [id=" + id + ", sub1=" + sub1 + ", sub2=" + sub2 + "]";
}
}
Students [id=584ea66e9e53b7802651de36, className=1, subject=Subject [id=class1, sub1=english, sub2=physics]]
{
"_id" : "class1",
"sub1" : "english",
"sub2" : "physics"
}
{
"_id" : ObjectId("584ea66e9e53b7802651de36"),
"name" : "abc",
"class" : "1",
"subjects" : {
"$ref" : "subjects",
"$id" : "class1",
"$db" : "localhost"
}
}
您可以这样制作学生收藏:
students
{
"name" : "abc"
"class" : "1"
"subjects" : [{ type: Schema.Types.ObjectId}] // You will store Objectids of subject
}
现在,当您找到关于学生的查询时,请填充数据。谢谢您的链接。但是我想执行join来合并数据。有可能吗?当你有了学生,你就有了对象。我希望这就是你所期待的。正如API文档中提到的,它将被急切地加载。我以前用过。对不起,因为我对这个很陌生,你能详细解释一下吗。我只是想知道这个答案是否有用?