如何从"引用"中获取完整的Json文件ID

时间:2014-07-16 02:12:44

标签: java json mongodb reference morphia

我正在使用@Reference来获取我需要的所有信息:

吗啡:

Query<Usuario> query = INSTANCE.createQuery(User.class);
    return query.asList();

然后回复我:

{"users":[{"id":"53c5dc31278cbc6f862d8556","username":"MyUserName","password":"1","person":{"id":"53c5dc31278cbc6f862d8555","name":"My Name is"..rest of attrs from person..

对我而言,这似乎非常容易获得有关某事的所有信息

但MongoDB的文档说我们在第一种情况下使用普通引用,只需将引用的文档id添加到第一个,例如:

MongoDB文档:

public class User {

@Id ObjectId id;
String username;
String password;
String personId; //or the ObjectId personId
}

public class Person {
@Id ObjectId id;
String name;
..
}

这会返回类似的内容:

{"users":[{"id":"53c5dc31278cbc6f862d8556","username":"MyUserName","password":"1","personId":"53c5dc31278cbc6f862d8555"}]}

怎么能在person的地方返回人的所有json像第一个例子,如果我用这种方式我也要改变视图,在第一个例子中我只需要在视图中显示结果类似于user.person.name

为什么使用@Reference和使用person id的普通参考的查询可能会有所不同?

因为两个人都会做2个查询??!?!

1 个答案:

答案 0 :(得分:1)

如果您存储的所有内容都是此人的ID,那么您将全部回来。如果要在User对象中返回完整的Person对象,则需要在User对象中添加Person字段并使用@Reference对其进行注释。然后,Morphia将加载您的User对象,然后执行另一个查询以加载引用的Person对象。但请注意,这会导致两个不同的查询,因此如果您正在执行大量User对象,性能可能会成为一个问题。