如何在吗啡中编写以下查询

How to write the following query in morphia

谁能帮我用吗啡写下下面的查询。谢谢

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

根据我对吗啡的研究,我使用了以下方法。但这是不正确的

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

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

在我的头撞到吗啡的墙上一周之后,我假设在吗啡中没有办法做到这一点,几乎我在吗啡中编写的每一个代码都给出了一个类型的查询

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

这只能确保成绩数组中的每个单独分数都大于 80 或小于 100。因此,如果文档的分数为 131,它仍将被返回。我的 objective 是只获取 grades 子文档中所有分数都在 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();

不过,如果有人能找到在吗啡中做到这一点的方法,我将不胜感激

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

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