我有以下映射:
@Document
class Event {
Object carbonCopy;
}
carbonCopy
具有多个属性,并且其架构不确定-各种事件可以具有不同的属性集。假设carbonCopy
具有status
字段。我需要找到所有Event
等于carbonCopy.status
的{{1}}。查询DSL是否可能,如何?我在NEW
和Path
实例的各种混合中挣扎,无济于事。
答案 0 :(得分:2)
您可以使用类似
在终端
db.events.find({"carbonCopy.status":"NEW"})
在终端中是否还需要存在
db.events.find({carbonCopy.status:{"$exists":true}},"carbonCopy.status":"NEW"})
现在谈到SDM
Criteria criteria = Criteria.where("carbonCopy.status").is("NEW")
Query query = new Query(criteria);
return mongoTemplate.findOne(query, Event.class);
Criteria criteria = Criteria.where("carbonCopy.status").is("NEW").And("carbonCopy.status").exists(true)
Query query = new Query(criteria);
return mongoTemplate.findOne(query, Event.class);
答案 1 :(得分:0)
使用以下代码是可能的:
QEvent event = QEvent.event;
PathBuilder<Event> query = new PathBuilder<Event>(Event.class, "entity");
BooleanExpression expr = query.getMap("objectCarbonCopy", String.class, String.class).get("status").eq(Expressions.constant("NEW"));
QEvent
是querydsl生成的类。