mongodb 如何从一个集合中引用其他集合中的文档

3vpjnl9f  于 2022-11-22  发布在  Go
关注(0)|答案(4)|浏览(210)

我有Office对象:

class Office{
   String address;
   int employees;
   String city;
   String State;
   ---- lot of other fields
}

我有mongo集合的Office类,让我们说100个Office文档由上述Office类表示。
然后是Employee类:

class Employee{
   String firstName;
   String lastName;
   Office office;
   -----other fields
}

在mongo集合中对于Employee类我如何防止Office对象被复制为每个Employee条目。
spring-boot mongodb中,有没有方法可以引用Office集合来表示Employee的Office对象,而不是在mongo db中为每个员工复制它。我希望我已经解释了我的问题。
先谢谢你。

cgh8pdjw

cgh8pdjw1#

您可以在Mongo中使用DBRef。Spring Data为此提供了一个注解:
@DBRef
但是,要小心,MongoDB是一个面向文档的NoSQL,是一个很好的将内容嵌入到文档中的实践。

编辑:

@DBRef的用法如下:https://docs.spring.io/spring-data/data-mongo/docs/1.7.0.RELEASE/reference/html/#mapping-usage-references

xiozqbni

xiozqbni2#

下面是您可以使用的代码:

@Document(collection="person")
public class Person
{

        @Id
        private Long personId;

        private String name;

        private int age;

        @DBRef(db="address")
        private List<Address> addresses = new ArrayList<Address>();

//other getters and setters

}
sbdsn5lh

sbdsn5lh3#

以您的示例为基础:

@Document
class Employee {
   private String firstName;
   private String lastName;

   @DBRef
   private Office office;

   /* other fields */
}
9nvpjoqh

9nvpjoqh4#

MongoBD中有两种类型的引用:实际上,the official documentation建议在几乎所有情况下都使用手动引用。
使用DBRef的情况:

  • 需要引用多个集合中的文档
  • 您需要引用另一个数据库中的文档

否则,请使用手动参考。
Spring Data MongoDB从3.3版本开始支持这两种类型的引用,当时引入了annotation @DocumentReference。

相关问题