如何在morphia中编写以下查询

时间:2016-06-06 05:35:34

标签: mongodb mongodb-java morphia

有人可以帮助我在morphia中编写以下查询。感谢

db.restaurants.find({grades : { $elemMatch:{"score":{$gt : 80 , $lt :100}}}});

根据我对morphia的研究,我使用了以下内容。但这不正确

List<Restaurant_M> r = ds.find(Restaurant_M.class)
                         .field("grades.score").lessThan(100)
                         .field("grades.score").greaterThan(80)
                         .asList();

3 个答案:

答案 0 :(得分:0)

您可以使用Morphia的filter(...)方法和'elem'运算符来获得所需的行为。见https://github.com/mongodb/morphia/wiki/Query

答案 1 :(得分:0)

将我的头撞在吗啡的墙壁上一周之后我假设在morphia中没有办法做到这一点几乎我在morphia中编写的所有代码都提供了类型的查询

query: { $and: [ { grades: { $elemMatch: { score: { $gt: 80 } } } }, { grades: { $elemMatch: { score: { $lt: 100 } } } } ] }

这只能确保成绩数组中的每个单独得分都超过80或低于100.因此,如果某个成绩为131的成绩,则仍会返回。我的目标是只得到那些级别子文档中所有分数都在80到100之间的文档。问题中发布的查询实现了这个,但我无法将其翻译成morphia

借助java驱动程序,我已经能够做到这一点。见下面的代码

Bson f1 = Filters.gt("score", 80);
Bson f2 = Filters.lt("score", 100);
Bson f3 = and (f1, f2);
MongoCursor<Document> c = collection.find(
            elemMatch("grades", f3))
                                    .iterator();

仍然,如果有人在morphia中找到了这样做的方法,我会很感激

答案 2 :(得分:0)

我刚刚添加了一个解决此问题的新elemMatch()。您可以尝试Morphia的快照构建或等待1.3版本。

https://github.com/mongodb/morphia/pull/985