我正在尝试将其放入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进行匹配,否则它可以匹配某个元素中的第一个条件和另一个元素中的第二个条件,但只有同时满足这两个条件的元素才有效。
发布于 2018-07-09 04:46:27
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);沿着这些思路的东西应该是有效的。
发布于 2015-06-22 22:35:07
我会尝试这样的东西:
Query<Table> query = mongoDataStore.find(Table.class)
.field("bar.table.tableId").hasAnyOf(tableIdArrayList)
.field("bar.table.tab").greaterThan(20000);您可能需要一些自定义查询构建器,您可以在其中设置一些条件,然后它将为您组合正确的查询-至少这是我们的方法。
https://stackoverflow.com/questions/30978668
复制相似问题