MongoDB Morphia elemMatch API

时间:2015-06-22 11:20:08

标签: mongodb morphia

我试图将其纳入morphia查询:

db.woot.find({
    "bar.tables": {
        $elemMatch: {
            "tableId": {
                $in: [3,
                4]
            },
            "tab": {
                $gte: 20000
            }
        }
    }
})

所以我有:

Query<Table> q
q.field("bar.table").hasThisElement()

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

请帮助我将上述查询转换为最好的Morphia等效项。

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

2 个答案:

答案 0 :(得分:1)

Morhpia现在具有elemMatch,因此您可以执行原始查询。

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 :(得分:0)

我会尝试这样的事情:

Query<Table> query = mongoDataStore.find(Table.class)
  .field("bar.table.tableId").hasAnyOf(tableIdArrayList)
  .field("bar.table.tab").greaterThan(20000);

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