首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB Morphia elemMatch接口

MongoDB Morphia elemMatch接口
EN

Stack Overflow用户
提问于 2015-06-22 19:20:08
回答 2查看 1.8K关注 0票数 0

我正在尝试将其放入morphia中:

代码语言:javascript
复制
db.woot.find({
    "bar.tables": {
        $elemMatch: {
            "tableId": {
                $in: [3,
                4]
            },
            "tab": {
                $gte: 20000
            }
        }
    }
})

所以我有:

代码语言:javascript
复制
Query<Table> q
q.field("bar.table").hasThisElement()

在这之后,我不知道如何完成查询,并且仍然使用支持in(),gte()方法的FieldEnd,而不是自己用BasicDBObjects编写整个查询。

请帮我把上面的查询转换成尽可能好的Morphia等价物。

bar.tables是一个数组,因此必须使用elemMatch进行匹配,否则它可以匹配某个元素中的第一个条件和另一个元素中的第二个条件,但只有同时满足这两个条件的元素才有效。

EN

回答 2

Stack Overflow用户

发布于 2018-07-09 04:46:27

Morhpia现在有了elemMatch,所以您可以执行原始查询。

代码语言:javascript
复制
Query<Example> tableQuery = mongoDatastore.createQuery(Example.class)
             .disableValidation()
             .field("tableId").hasAnyOf(Arrays.asList(3, 4))
             .field("tab").greaterThanOrEq(20000);
Query<Table> query = getCDB().getDatastore()
            .createQuery(Table.class)
            .field("bar.table").elemMatch(tableQuery);

沿着这些思路的东西应该是有效的。

票数 1
EN

Stack Overflow用户

发布于 2015-06-22 22:35:07

我会尝试这样的东西:

代码语言:javascript
复制
Query<Table> query = mongoDataStore.find(Table.class)
  .field("bar.table.tableId").hasAnyOf(tableIdArrayList)
  .field("bar.table.tab").greaterThan(20000);

您可能需要一些自定义查询构建器,您可以在其中设置一些条件,然后它将为您组合正确的查询-至少这是我们的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30978668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档