我有一个 mongodb 有两个模型类说User和UserInfo。标准是在User类中,我必须检索大约 10 个字段的多个字段,例如"firstName","lastName"
等,而在UserInfo模型类中,我只喜欢检索一个字段,例如“年龄”。
此刻,我将 UserInfo 类的对象引用到 User 类中,如下面所述的结构及其在数据库中的存储, {"firstName","John"},{"lastName","Nash"},{userInfo: userInfoID}
但如果我创建一个嵌入式关系,那么它将存储所有 userInfo 的字段,我想检索一个(“年龄") 字段 不需要嵌入所有 userInfo 的字段,我认为这反过来会使应用程序变慢。
无论是@Reference 还是@Embedded,我应该使用哪种场景,我认为Embedded 会减慢我对DB 的响应,但在网站中,它作为参考注释给出只会减慢查询时间并且需要某种延迟加载,我的结构就像以下:
class User extends Model{
public String firstName;
public String lastName;
public String loginTime;
public String logoutTime;
public String emailId; etc,etc......
Some more 10 fields like this+userInfo reference object
@Reference
public UserInfo userInfo;
}
class UserInfo extends Model{
public String emailId;
public String age;
public String sex;
public String address;
public String bank; etc,etc......
Some more 10 fields like this
}
正如我上面所说,我只想要UserInfo中的年龄字段和User的所有字段,所以哪个 Annotation 最好,@Reference 或 @Embedded。如果我得到一个对 User 类的查询,我可以在其中检索 User 的所有字段并且只检索 UserInfo 的“age”字段,这将更有帮助。简而言之,当我使用@Reference 关系时,我需要这样的查询
field("userInfo.age") for userInfo.emailId = (MorphiaQuery q = User.createMorphiaQuery;
q.field("firstName").equal("John"); q.field("lastName").equal("Nash"); q.field("loginTime").greaterthan("sometime"))//the complex part where I need age of particular userInfo but I have only the ID of the userInfo since I am using Reference and that Id too got from a **subQuery**....
请不要写两个查询我需要一个查询或者一个带有子查询的查询。为了更清楚,我可以用 SQL 语言来说明:
SELECT age FROM UserInfo where emailId = u.emailId
(SELECT * FROM User WHERE firstName='John' AND lastName='Nash' AND
logintime='someTime') AS u;
我需要这个完全相同的查询,而无需编写两个 morphia 查询,这会通过引用两个表来消耗更多时间。