我想基于对象的id(或其他单个字段)检索一个对象,该对象嵌套在我想要检索的对象的2个级别。举例说明:
我想查找特定用户评论过的所有博文。
Blog
List<Comment>
ignoredField1
ignoredField2
User
id
name
ignoredField3
评论和用户的父对象是@Referenced。
阅读此帖后 http://groups.google.com/group/morphia/browse_thread/thread/57090ef1bd2f3e74?pli=1
我理解如何找到带有注释的博客,其中ignoredField1 / 2具有特定值,但我想要进一步导航。
我尝试过以下操作,但因为比较了所有评论字段,所以没有匹配
q.field("comments").hasThisElement(new Comment(new User("name")));
答案 0 :(得分:4)
我必须在以下几个步骤中做到这一点:
获取用户的对象ID
ObjectId id = userObj.getId();
获取该用户的所有评论
Query q = ds.createQuery(Comment.class);
q.field("user").equal("name");
q.retrievedFields(true, "_id"); // just get the IDs
获取包含这些评论的所有博客..
然而,有更好的方法:
嵌入评论而不是引用它们。它们作为一个独立的对象没有多大意义。然后你可以这样做:
Query q = ds.createQuery(Blog.class);
q.field("comments.user").equal("name");
将评论中的引用添加回Blog - 例如名为“blog”的ObjectId字段。然后你可以这样做:
Query q = ds.createQuery(Comment.class);
q.field("user").equal("name");
q.retrievedFields(true, "blog"); // only get the blog ObjectIds
获取所有Blog对象ID,然后再继续加载它们。