【问题标题】:Mongo ReflectionDBObject, map ALL embedded array's elements to a class;Mongo ReflectionDBObject,将所有嵌入数组的元素映射到一个类;
【发布时间】:2012-01-13 09:29:01
【问题描述】:

我使用 Mongo 和原生 Java 驱动程序(没有第 3 方库/ORM)。我有这个:

public class Release extends ReflectionDBObject {

    //other fields omitted    

    private List<ReleaseDetailsByTerritory> releaseDetailsByTerritory = new ArrayList<ReleaseDetailsByTerritory>();

}

public class ReleaseDetailsByTerritory extends ReflectionDBObject { //...}

如果我想检索具有两个“ReleaseDetailsByTerritory”条目的“Release”条目,并让它们在包含两个 ReleaseDetailsByTerritory 类实例的列表的 Release 类实例中自动实例化,我必须这样做:

releaseColl.setObjectClass(Release.class);
releaseColl.setInternalClass("ReleaseDetailsByTerritory.0", ReleaseDetailsByTerritory.class);
releaseColl.setInternalClass("ReleaseDetailsByTerritory.1", ReleaseDetailsByTerritory.class);
Release r = (Release) releaseColl.findOne();

即我需要将嵌入数组的每个潜在元素专门映射到相应的类。

有没有办法告诉 Mongo 驱动程序我希望将嵌入式数组的所有元素和任何元素映射到某个类?类似的东西:

collection.setInternalClass("ReleaseDetailsByTerritory.*", ReleaseDetailsByTerritory.class);

?

谢谢。请不要说“使用 Spring MondoDb 模块或 Morphia”。我想知道这是否可以通过 Mongo 本机 Java 驱动程序实现。

【问题讨论】:

  • 查看源代码,我认为这是不可能的。我假设您尝试传递“ReleaseDetailsByTerritory”?所以,没有 .0 或 .*?
  • 是的,我尝试传递“ReleaseDetailsByTerritory”,但它不起作用。我认为您是对的,我也刚刚查看了来源,仅此而已。如果您想将您的评论变成答案,我会将其设为“选择的答案”。如果没有,我会自己回答(在 2 天内)。

标签: java mongodb mapping driver mongo-java


【解决方案1】:

查看源代码,我认为这是不可能的。也没有明显的方法可以根据您的需要创建便利功能。考虑到大型数组会占用大量内存,必须为每个数组元素调用 setInternalClass 几乎不是一种选择。

您可能需要考虑实现您自己的“文档”类的实现,该类可以满足您的需要,而无需使用诸如 Morphia 之类的完整映射解决方案(这实际上非常优雅,至少比 Spring 更出色)。

您也可以考虑在 jira.mongodb.org 上打开一个 JIRA 问题并请求此功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-02
    • 2020-12-24
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多