使用morphia在mongodb中的对象列表中搜索

时间:2014-01-24 01:21:37

标签: java mongodb morphia

我是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,我甚至不确定这是否是最好的解决方法。

1 个答案:

答案 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);