使用吗啡搜索对象数组

mar*_*ark 2 java mongodb morphia

我在执行吗啡查询时遇到问题。我有一个这样的架构:

{ authorId:12345,
  comments:[
     { userId:34567,
       name:"joe" },
     { userId:98765,
       name:"sam" }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我想使用吗啡查找所有记录,其中searchId 等于authorId 或userId。

我尝试了一系列的事情,但我没有得到它。例如

Query<Record> query = datastore.find(Record.class);
query.or(
      query.criteria(authorId).equal(searchId),
      query.criteria(comments).hasAnyOf(Collections.singletonList(searchId))
  );
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用 hasThisElement,但这也不起作用。
我该怎么做呢?

chr*_*dam 5

由于comments是嵌入字段,因此使用点符号来查询嵌入文档的字段。mongo shell 查询

db.records.find(
    {
        "$or": [
            { "authorId": searchId },
            { "comments.userId": searchId }
        ]
    }
)
Run Code Online (Sandbox Code Playgroud)

就是你需要的。Morphia 的等价物是

Datastore ds = ...
Query<Record> q = ds.createQuery(Record.class);
q.or(
    q.criteria("authorId").equal(searchId),
    q.criteria("comments.userId").equal(searchId)
);

//list
List<Record> entities = q.asList();
Run Code Online (Sandbox Code Playgroud)