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

如何从Neo4j驱动程序中获取节点属性为Map类型

解决Neo4j原生驱动返回InternalNode转属性Map的问题

你可以通过两种方式把返回结果中的InternalNode转换为节点属性的Map<String, Object>:

方式一:使用Record.asMap()的重载方法自定义转换逻辑

利用Record.asMap(ValueMapper)方法,对每个值做类型判断,若为Node类型则提取其属性:

import org.neo4j.driver.types.Node;
import org.neo4j.driver.Value;

// ...

List<Record> result = session.run(cql, params).list();
return result.stream()
    .map(record -> record.asMap((Value value, Class<?> type) -> {
        if (value.isNode()) {
            return value.asNode().properties();
        }
        // 其他类型(如Relationship、基本类型)直接返回原对象
        return value.asObject();
    }))
    .collect(Collectors.toList());

方式二:遍历Record的Entry手动转换

逐个处理Record中的每个键值对,针对Node类型单独提取属性:

import org.neo4j.driver.types.Node;
import org.neo4j.driver.Value;
import java.util.HashMap;

// ...

List<Record> result = session.run(cql, params).list();
return result.stream()
    .map(record -> {
        Map<String, Object> convertedMap = new HashMap<>();
        for (var entry : record.entrySet()) {
            Value value = entry.getValue();
            if (value.isNode()) {
                convertedMap.put(entry.getKey(), value.asNode().properties());
            } else {
                convertedMap.put(entry.getKey(), value.asObject());
            }
        }
        return convertedMap;
    })
    .collect(Collectors.toList());

关键说明

  • InternalNode是Neo4j驱动内部对Node接口的实现类,直接用Node接口的properties()方法就能获取节点的所有属性Map。
  • Value.isNode()用于判断当前值是否为节点类型,value.asNode()可将其转为Node实例后操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 07:10:27