Tob*_*oby 6 java mongodb playframework morphia
我想根据一个对象的ID(或其他单个字段)来检索一个对象,该对象从要检索的对象中嵌套2个级别。一个例子来说明:
我想查找特定用户已评论过的所有博客文章。
Blog
List<Comment>
ignoredField1
ignoredField2
User
id
name
ignoredField3
Run Code Online (Sandbox Code Playgroud)
注释和用户由其父对象引用。
阅读这篇文章后 http://groups.google.com/group/morphia/browse_thread/thread/57090ef1bd2f3e74?pli=1
我了解如何找到带有注释的博客,其中ignoreField1 / 2具有特定的价值,但我想进一步浏览。
我尝试了以下操作,但是由于比较了所有注释字段,所以没有匹配项
q.field("comments").hasThisElement(new Comment(new User("name")));
Run Code Online (Sandbox Code Playgroud)
我认为您必须按照几个步骤进行操作:
获取用户的对象ID
ObjectId id = userObj.getId();
Run Code Online (Sandbox Code Playgroud)获取与该用户的所有评论
Query q = ds.createQuery(Comment.class);
q.field("user").equal("name");
q.retrievedFields(true, "_id"); // just get the IDs
Run Code Online (Sandbox Code Playgroud)获取所有带有这些评论的博客。
但是,有更好的方法:
嵌入评论而不是引用它们。它们作为独立对象没有多大意义。然后,您可以执行以下操作:
Query q = ds.createQuery(Blog.class);
q.field("comments.user").equal("name");
Run Code Online (Sandbox Code Playgroud)从注释添加回引用到Blog的引用-例如,一个名为“ blog”的ObjectId字段。然后,您可以执行以下操作:
Query q = ds.createQuery(Comment.class);
q.field("user").equal("name");
q.retrievedFields(true, "blog"); // only get the blog ObjectIds
Run Code Online (Sandbox Code Playgroud)获取所有Blog对象ID,然后在下一步中加载它们。
归档时间: |
|
查看次数: |
6624 次 |
最近记录: |