我是Java的新手。我是mongoDB的新手。
我有一个看起来像这样的集合:
{
"_id" : "1234",
"name" : "bill",
"products" : [
{
"fooType" : "bar",
.....
},
{
"fooType" : "oof",
.....
}
],
"status" : "Truncated"
},
{...}
我正在尝试通过fooType实现搜索功能。我能够使用标准的mongodb语法创建一个工作查询,但无法弄清楚如何使用morphia实现。
正在运行的mongodb查询:
db.Clients.find({products: {$elemMatch: {fooType: "bar"}}})
我尝试过的一些(截断的)代码没有成功:
DatastoreImpl ds;
q = ds.createQuery(Clients.class).field("products").hasThisElement("fooType");
显然这不起作用,因为它需要一个对象。我似乎无法理解如何使用hasThisElement,我甚至不确定这是否是最好的解决方法。
答案 0 :(得分:3)
hasThisElement
期望参数中有一个对象,因此您无法使用字符串“fooType”或“bar”。
假设您拥有此集合的以下类:
class Clients {
String id;
String name;
List<Product> products = new ArrayList<Product>();
String status;
}
class Product {
String fooType;
....
}
要使用$elemMatch
,您需要在products
上为过滤器创建一个对象,如下所示,并在hasThisElement()
中使用此过滤器对象:
Product filterProduct = new Product();
filterProduct.fooType = "bar";
Query q = ds.createQuery(Clients.class).field("products").hasThisElement(filterProduct);