一般的なブログアプリの一部として、次の Play Framework エンティティ (永続化のために Morphia を使用) があります。
@Entity
public class Comment extends Model {
...
@Reference
@Indexed
public SiteUser commenter;
public static List<Comment> getLastCommentsByUsers(final List<SiteUser> users) {
final Query<Comment> query ds().createQuery(Comment.class);
query.field(commenter).hasAnyOf(users);
return query.asList();
}
}
サイトユーザー:
@Entity(noClassnameStored=true)
public class SiteUser extends AbstractUser {
public String realName;
}
抽象ユーザー:
public class AbstractUser extends Model {
@Indexed(value= IndexDirection.DESC, unique = true)
public String emailAddress;
@Required
public String password;
}
このメソッドgetLastCommentsByUsers()
は、パラメーター内のユーザーによるすべてのコメントを返すことになっていusers
ますが、常に空のコメントが返されList
ます。が別のコレクションである理由は、特定のユーザーが関連付けられたCommment
から最後の X を取得できるようにするためです。これは、 がコレクションに埋め込まれている場合は不可能です。Comment
Post
Comment
Post
クエリに何か問題がありますか ( 以外のものを使用する必要がありますhasAnyOf
)、または関係マッピングに問題がありObjectId
ますか? 代わりに使用する必要がありますか?