如何用Cypher DSL生成包含point.withinBBox()的Neo4j查询Condition
使用Neo4j Cypher DSL构建边界框查询Condition
要实现对应point.withinBBox()逻辑的Condition实例,你可以直接利用Cypher DSL提供的函数工具类来构建,以下是具体实现步骤和代码:
核心代码实现
// 定义Location节点的引用,对应Cypher中的(loc:Location) Node loc = Cypher.node("Location").named("loc"); // 构建边界框的西南角点 Expression southwest = Functions.point( Cypher.mapOf( "longitude", Cypher.literalOf(2.592773), "latitude", Cypher.literalOf(46.346928) ) ); // 构建边界框的东北角点 Expression northeast = Functions.point( Cypher.mapOf( "longitude", Cypher.literalOf(18.654785), "latitude", Cypher.literalOf(55.714735) ) ); // 构建point.withinBBox对应的Condition Condition bboxCondition = Functions.pointWithinBBox( loc.property("coordinates"), southwest, northeast ); // 和已有条件链式拼接(沿用你当前的方式) Condition conditions = Conditions.noCondition(); conditions = conditions.and(bboxCondition);
生成的Cypher验证
上述代码构建的Condition会生成你需要的WHERE子句逻辑,最终拼接成完整查询后,生成的Cypher语句与你给出的示例一致:
MATCH (loc:Location) WHERE point.withinBBox(loc.coordinates, point({longitude: 2.592773, latitude: 46.346928}), point({longitude: 18.654785, latitude: 55.714735})) RETURN loc
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

