gpt4 book ai didi

java - 基于深度嵌套对象单字段的morphia查询

转载 作者:IT老高 更新时间:2023-10-28 13:28:47 26 4
gpt4 key购买 nike

我想检索一个对象,它基于一个对象的 id(或其他单个字段),该对象与我要检索的对象嵌套 2 层。举例说明:

我想查找特定用户评论过的所有博客文章。

Blog
List<Comment>
ignoredField1
ignoredField2
User
id
name
ignoredField3

评论和用户被他们的父对象@Referenced。

看完这篇文章 http://groups.google.com/group/morphia/browse_thread/thread/57090ef1bd2f3e74?pli=1

我知道如何找到带有 ignoreField1/2 具有特定值的评论的博客,但我想进一步导航。

我尝试了以下方法,但是因为比较了所有评论字段,所以没有匹配项

q.field("comments").hasThisElement(new Comment(new User("name")));

最佳答案

我认为您必须分几步完成:

  1. 获取用户的对象 ID

    ObjectId id = userObj.getId();
  2. 获取该用户的所有评论

    Query q = ds.createQuery(Comment.class);
    q.field("user").equal("name");
    q.retrievedFields(true, "_id"); // just get the IDs
  3. 获取所有带有这些评论的博客..

不过,还有更好的方法:

  1. 嵌入评论而不是引用它们。作为一个独立的对象,它们没有多大意义。然后你可以这样做:

    Query q = ds.createQuery(Blog.class);
    q.field("comments.user").equal("name");
  2. 将 Comments 中的引用添加回 Blog - 例如名为“blog”的 ObjectId 字段。然后你可以这样做:

    Query q = ds.createQuery(Comment.class);
    q.field("user").equal("name");
    q.retrievedFields(true, "blog"); // only get the blog ObjectIds

获取所有博客对象 ID,然后在进一步的步骤中加载它们。

关于java - 基于深度嵌套对象单字段的morphia查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8784738/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com