使用Morphia在另一个集合中获取引用的mongodb文档

时间:2014-01-30 21:55:07

标签: java mongodb morphia

我一直在试图围绕着这个...... 我在用户和组集合中有以下参考文档。

小组文件

{
"_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中实现此目的?

感谢。

1 个答案:

答案 0 :(得分:1)

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

如果您的应用程序可以这样做,您可能需要查看使用Embedded Annotation而不是Reference类型。或者除了对象引用之外,至少要在Group对象中包含用户名列表。这样您就可以在查询中过滤这些内容。

同样值得考虑将任何唯一标识符(如“username”)移动到文档的_id字段,只要它始终是唯一的。主键查找总是更快。