java - 使用吗啡搜索对象数组

标签 java mongodb morphia

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

{ authorId:12345,
  comments:[
     { userId:34567,
       name:"joe" },
     { userId:98765,
       name:"sam" }
  ]
}

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

我已经尝试了一系列的方法,但我没有得到它。例如

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

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

最佳答案

由于 comments 是嵌入字段,因此请使用 dot notation 查询嵌入文档的字段。 mongo shell 查询

db.records.find(
    {
        "$or": [
            { "authorId": searchId },
            { "comments.userId": searchId }
        ]
    }
)

就是你所需要的。 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();

关于java - 使用吗啡搜索对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33866619/

相关文章:

Java:按类型对列表元素进行分组

java - 数组越界异常:0

mongodb - MongoDB GridFS 中是否维护 CRUD 操作的原子性?

java - 如何查询一对一的Squillions

java - Morphia 中用于嵌套类的 ORM

java - 如何使用shell脚本调用JAVA类方法?

java - 如何禁用窗体的 struts 2 表生成?

Scala 类型不匹配

ruby-on-rails - 使用 Mongoid Model.in 方法的最大距离

mongodb - 使用吗啡仅选择mongo db中的一列