java - 如何从 "referenced"文档ID获取完整的Json

标签 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"}]}

如何返回人员的所有 json 来代替 personId 的位置,就像第一个示例一样,如果我以这种方式使用,我也必须更改 View ,在第一个示例中,我只需要使用在 View 中显示结果类似于 user.person.name

为什么使用 @Reference 的查询和使用 person id 的普通引用可能不同?

因为两者都会执行 2 个查询??!?!

最佳答案

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

关于java - 如何从 "referenced"文档ID获取完整的Json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24771143/

相关文章:

java - 使用 WireMock 模拟 Http 服务器响应。 FileNotFoundException异常

MongoDB日志: extent 0:550000 and can't find plugin [desc]

c# - mongodb + 银光

java - 将 Java 8 与 LibGDX 结合使用

java - 如何在 Java EE 环境中管理数据库和文件系统的事务?

java - 如何通过 Struts 2 中的代码动态设置区域设置

json - PostgreSQL 9.4 to_jsonb

c# - JSON.NET 不会反序列化为私有(private)属性

javascript - MongoDB ObjectID 的正则表达式

java - WeakReference#get() 什么时候开始返回 null?