在 mongo 和 spring 引导下使用具有未确定模式的 querydsl
Using querydsl with undetermined schema with mongo and spring boot
我有以下映射:
@Document
class Event {
Object carbonCopy;
}
carbonCopy
有多个属性,其模式未定 - 各种事件可以有不同的属性集。假设 carbonCopy
有 status
字段。我需要找到 carbonCopy.status
等于 NEW
的所有 Event
。查询 DSL 有可能吗?我正在努力处理 Path
和 Expression
实例的各种组合,但无济于事。
可以通过以下代码实现:
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生成的class。
你可以用类似的
在终端
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);
我有以下映射:
@Document
class Event {
Object carbonCopy;
}
carbonCopy
有多个属性,其模式未定 - 各种事件可以有不同的属性集。假设 carbonCopy
有 status
字段。我需要找到 carbonCopy.status
等于 NEW
的所有 Event
。查询 DSL 有可能吗?我正在努力处理 Path
和 Expression
实例的各种组合,但无济于事。
可以通过以下代码实现:
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生成的class。
你可以用类似的
在终端
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);