使用morphia执行$ elemMatch查询时如何进行数值比较

时间:2013-05-13 03:39:53

标签: java mongodb morphia

我的文档具有以下结构:

{
"scores": [{
    "scoreTitle": "environment",
    "scoreValue": 3,
    "scoreDescribe": "good"
}, {
    "scoreTitle": "service",
    "scoreValue": 3,
    "scoreDescribe": "good"
}, {
    "scoreTitle": "taste",
    "scoreValue": 4,
    "scoreDescribe": "good"
}]
}

在mongo shell中,我可以使用以下查询来查找具有标题为“environment”且值大于2的分数的文档。

db.reviews.find({"scores":{"$elemMatch":{"scoreValue":{"$gt":2},"scoreTitle":"environment"}}})

现在我想使用morphia查询文档,在api doc中,fiter方法支持'elem'运算符,并且需要一个额外的查询条件对象,例如,查询具有分数的文档标题是“环境”,描述是“好”:

Score score = new Score();// the criteria object, only support comparisons of equality
score.setScoreTitle("environment"); // title should be environment
score.setScoreDescribe("good"); // describe should be good
Query q = ds.createQuery(Review.class).filter("scores elem", score);

我的问题是:如何在查询条件中进行数值比较,也就是说,如何进行与mongo shell对应的效果相同的查询。

2 个答案:

答案 0 :(得分:1)

我想你可以试试

ds.createQuery(Review.class).
  filter("scores.scoreValue >=", 2).
  filter("scores.scoreTitle", "environment").
  retrievedFields(true, "scores.$")

答案 1 :(得分:0)

Morphia代码库有大量的测试,您可以在这里查看几种不同的比较运算符的示例:

http://code.google.com/p/morphia/source/browse/trunk/morphia/src/test/java/com/google/code/morphia/TestQuery.java