【发布时间】:2013-07-31 19:06:10
【问题描述】:
我有一个带有两个模型类的 mongodb,分别是 User 和 UserInfo。条件是在 User 类中,我必须检索大约 10 个字段的多个字段,例如 "firstName","lastName" 等,而在 UserInfo 模型类中,我只喜欢检索一个字段说“ 年龄”。
此时我将 UserInfo 类的对象引用到 User 类中,如下面的 Structure 中所述,它在 DB 中的存储为 {"firstName","John"},{"lastName","Nash"},{userInfo: userInfoID} 但如果我创建一个 Embedded 关系然后它将存储所有 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 中的 age 字段和 User 的 all 字段,因此最好使用注释和@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 查询,这会通过引用两个表来消耗更多时间。
【问题讨论】:
标签: java mongodb playframework morphia nosql