Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb I';我在研究Morphia,但和DBRef混淆了_Mongodb_Morphia_Dbref - Fatal编程技术网

Mongodb I';我在研究Morphia,但和DBRef混淆了

Mongodb I';我在研究Morphia,但和DBRef混淆了,mongodb,morphia,dbref,Mongodb,Morphia,Dbref,1 @Entity public class Blog { @Id ObjectId id; @reference User author; String content; } 或 2 @Entity public class Blog { @Id ObjectId id; ObjectId authorId; String content; } 我应该选择哪一个 eveytime blogDAO.get(id);每个查询的第一个将加载所有用户数据, 这会

1

@Entity
public class Blog {
   @Id ObjectId id;
   @reference User author;
   String content;
}

2

@Entity
public class Blog {
   @Id ObjectId id;
   ObjectId authorId;
   String content;
}
我应该选择哪一个

eveytime blogDAO.get(id);每个查询的第一个将加载所有用户数据,
这会很慢还是浪费时间

看看这篇文章。它提供了一些关于DBRefs的信息

这在很大程度上取决于用例,但实际上,一般的经验法则是避免使用DBREF,除非绝对需要。如果您可以通过使用嵌入属性来摆脱(尽一切努力),那么您应该这样做

但是,如果您的访问模式是这样的,以致于您无法通过父项真正获取所引用的项,那么您可以使用简单的基于objectid的引用,而不是dbref

我建议:


Mongodb非常适合数据非规范化,所以我的意见是,您需要在博客文章中添加一些与用户相关的数据,以便快速显示博客文章列表。如果您需要更多的用户信息,然后存在于博客文档中(例如博客显示),您可以先加载博客,然后加载用户。当每个用户更新其个人资料时,您还需要更新其博客中的用户数据

我建议如下:

@Entity
public class Blog {
   @Id ObjectId id;
   @Reference(lazy = true) User author;
以及具有非规范化的字段。通过这种方式,您可以访问用户对象,但Morphia将仅在需要时加载它


注意:您需要在类路径中使用cglib和proxytools才能工作。请参阅:

我很困惑为什么这么多morphia示例使用@References,似乎它通常被滥用,因为morphia自动加载ref。在这个场景中:用户{followersList,followersList},我应该使用List还是List,如果我在获得一个用户时使用ref,我可以直接获得所有的追随者,但似乎检索一个用户,可以导致递归检索一个用户网络,似乎我必须对followersList中的每个id进行查询?
@Entity
public class Blog {
   @Id ObjectId id;
   @Reference(lazy = true) User author;