You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

apoc.cypher.doit 有哪些使用示例?覆盖全参数的应用场景有哪些?

apoc.cypher.doit 全参数使用示例

函数基础参数说明

apoc.cypher.doit是APOC扩展库中用于执行动态Cypher语句的核心过程,支持参数化原生Cypher无法动态传入的标签、属性名、关系类型等内容,完整参数定义如下:

  • 第一个参数cypher:必填,字符串类型,需要执行的动态Cypher语句
  • 第二个参数params:必填,Map类型,传递给动态Cypher的参数集合,无参数时传空Map{}即可
  • 第三个参数readOnly:可选,布尔类型,默认值为false,设为true时仅允许执行只读查询,避免意外修改数据

场景1:只读查询(开启readOnly安全模式)

适合仅做数据查询、不需要修改图数据的场景,开启readOnly=true可以避免动态语句拼接错误导致的意外写入:

// 动态查询指定标签的节点总数
CALL apoc.cypher.doit(
  'MATCH (n:$label) RETURN count(n) AS total',
  {label: 'User'},
  true
) YIELD value
RETURN value.total AS userCount;

场景2:执行写入操作(默认readOnly=false)

不需要传第三个参数即可执行数据创建、更新、删除等写入类操作:

// 批量创建商品节点
CALL apoc.cypher.doit(
  'UNWIND $productList AS p CREATE (prod:Product {id: p.id, name: p.name, price: p.price}) RETURN collect(prod.id) AS createdIds',
  {
    productList: [
      {id: 1, name: '无线耳机', price: 299},
      {id: 2, name: '机械键盘', price: 499},
      {id: 3, name: '显示器', price: 1299}
    ]
  }
) YIELD value
RETURN value.createdIds AS newProductIds;

场景3:动态条件更新

可以灵活参数化查询条件、更新字段等内容,适配多维度的动态业务需求:

// 动态给满足指定价格阈值的商品打折扣标记
CALL apoc.cypher.doit(
  'MATCH (n:$label) WHERE n.$prop < $threshold SET n.isDiscount = true RETURN count(n) AS updatedCount',
  {
    label: 'Product',
    prop: 'price',
    threshold: 300
  }
) YIELD value
RETURN value.updatedCount AS discountProductCount;

场景4:无外部参数的动态执行

如果动态Cypher不需要传入外部参数,第二个参数传空Map即可:

// 统计所有已支付订单的总金额,无需传参
CALL apoc.cypher.doit(
  'MATCH (n:Order) WHERE n.status = "paid" RETURN sum(n.amount) AS totalPaidAmount',
  {}
) YIELD value
RETURN value.totalPaidAmount AS totalTradeAmount;

注意事项

  • 该过程支持参数化原生Cypher不支持的标签、关系类型、属性名,不需要手动拼接字符串,可以有效避免Cypher注入风险
  • 所有查询返回的结果都封装在value Map中,直接通过value.字段名即可获取对应结果
  • 纯查询场景建议始终开启readOnly=true,提升执行安全性

内容的提问来源于stack exchange,提问作者KReddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 10:54:03