Morphia - 基于子文档的查询

时间:2014-02-10 09:03:04

标签: mongodb mongodb-query morphia

我有一个mongo集合,其文档如下所示:

{
"_id" : ObjectId("9873214jkhdkfjdsf8324"),
"nm" : "test",
"sts" : 1,
"updby" : NumberLong(0),
"tags" : [ 
    {
        "name" : "women", 
        "rank" : 1, 
        "type" : 3 
    }, 
    {
        "name" : "men",
        "rank" : 1
    }, 
    {
        "name" : "clothing",
        "rank" : 2,
        "type" : 1
    }
]

}

我想查询集合,以便我想要所有具有“name”的文档:“women”和“type”:3在每个文档的tags子文档中返回。

我知道mongo查询应该是这样的:

db.collection.find("tags":{
            $all:[
                {"$elemMatch":{"name":"women","type":3}},               
            ]})

我尝试使用morphia提供的'hasthiselement',但我无法形成我想要的确切查询。

 getMongoDAORead().getDatastore().createQuery(test.class)
                .field("tags").hasThisElement("name").equal("women");

此查询似乎不正确。有人可以帮我形成正确的查询吗?

1 个答案:

答案 0 :(得分:5)

我通过执行以下操作来修复此问题:

我创建了一个Tags类的对象并对其进行了初始化:

Tags tag = new Tags("women", null, 3);

Query<MyClass> t = getMongoDAORead().getDatastore()
        .createQuery(MyClass.class)
        .field("ctags").hasThisElement(tag);