我有一个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");
此查询似乎不正确。有人可以帮我形成正确的查询吗?
答案 0 :(得分:5)
我通过执行以下操作来修复此问题:
我创建了一个Tags类的对象并对其进行了初始化:
Tags tag = new Tags("women", null, 3);
Query<MyClass> t = getMongoDAORead().getDatastore()
.createQuery(MyClass.class)
.field("ctags").hasThisElement(tag);