【问题标题】:Fetching referenced mongodb documents in another collection using Morphia使用 Morphia 在另一个集合中获取引用的 mongodb 文档
【发布时间】:2014-01-30 21:55:07
【问题描述】:

我一直在努力解决这个问题... 我在用户和组集合中有以下参考文档。

组文档

{
"_id" : ObjectId("52eabc9914cc8d6cc1e6f723"),
"className" : "org.xxxxxx.sms.core.domain.Group",
"name" : "CE Play group",
"description" : "CE Play group",
"creationdate" : ISODate("2014-01-30T20:56:57.848Z"),
"user" : DBRef("users", ObjectId("52ea69c714ccd207329b2476"))
}
{
"_id" : ObjectId("52ea69c714ccd207329b2477"),
"className" : "org.xxxxxx.sms.core.domain.Group",
"name" : "Default",
"description" : "Default sms group",
"creationdate" : ISODate("2014-01-30T15:03:35.916Z"),
"user" : DBRef("users", ObjectId("52ea69c714ccd207329b2476"))
}

用户文档

{
"_id" : ObjectId("52ea69c714ccd207329b2476"),
"className" : "org.xxxxxx.core.domain.User",
"username" : "jomski2009",
"firstname" : "Jome",
"lastname" : "Akpoduado",
"email" : "jomea@example.com",
"active" : true,
"usergroups" : [
    DBRef("groups", ObjectId("52ea69c714ccd207329b2477")),
    DBRef("groups", ObjectId("52eabc9914cc8d6cc1e6f723"))
]
}

我有一个 Morphia Datastore 单例对象,该对象已在一个类中设置,用于检索用户组并对其执行一些操作。假设我想使用提供的用户名 "jomski2009" 获取名为 "Default" 的组,我将如何在 Morphia 中实现这一点,而无需将用户组作为列表获取并遍历组列表以找到我想要的组?

谢谢。

【问题讨论】:

    标签: java mongodb morphia


    【解决方案1】:

    DBRef 在 Mongo 中用作客户端概念。 MongoDB 不进行连接,因此 DBRef 的目的是向客户端移交一个从中获取所需对象的位置。这由不同的客户端库以不同的方式处理。

    如果您的应用程序可以这样做,您可能想看看使用Embedded Annotation 而不是引用类型。或者至少在您的 Group 对象中包含用户名列表以及对象引用。这将允许您在查询中过滤这些。

    此外,只要将任何唯一标识符(例如“用户名”)移动到文档的 _id 字段中,它也是值得的,只要它始终是唯一的。主键查找总是更快。

    【讨论】:

    • 非常感谢尼尔。你的建议很有帮助。我使用用户名字段作为 Id,而不是将用户作为 DBRef 对象添加到 Group 集合中,我只是添加了用户名并与组名组合(它们一起形成了一个唯一的实体),现在检索特定组变得轻而易举.
    猜你喜欢
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    • 2023-01-31
    • 2016-11-26
    相关资源
    最近更新 更多