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

如何在OrientDB中获取JSON格式而非对象的分组关联数据

解决OrientDB MATCH查询分组后仅返回记录ID的问题

嘿,我明白你遇到的问题了!刚接触OrientDB的时候确实容易踩这种小坑——你现在的查询里用CONCAT(sku),OrientDB会默认返回SKU记录的RID(就是那些#xxx:xxx格式的ID),而不是你想要的SKU具体属性值。

问题根源

当你直接在聚合函数里使用记录变量(比如sku)时,OrientDB不会自动提取它的属性,而是返回该记录的唯一标识符RID。要拿到实际的SKU数据,你需要明确指定要聚合的具体字段,比如SKU的名称、编码或者其他你需要的属性。

修正后的查询示例

根据你的需求,这里提供几种可行的写法:

1. 收集SKU属性为列表(推荐,可读性强)

如果只是想把每个子分类下的SKU属性整理成列表,用LIST()聚合函数:

MATCH {class: SKU, as: sku}-categorizedIn-> {class:Category, as: subcat}<-hasSubcategory-{class: Category, as: cat, where: (name='Drinks')} 
RETURN subcat.name, LIST(sku.name) AS sku_names 
GROUP BY subcat.name

把sku.name换成你实际需要的SKU字段(比如sku.code、sku.id)即可。

2. 拼接SKU属性为字符串

如果需要用逗号把SKU属性拼接成单个字符串,OrientDB 3.0及以上版本可以用CONCAT_AGG():

MATCH {class: SKU, as: sku}-categorizedIn-> {class:Category, as: subcat}<-hasSubcategory-{class: Category, as: cat, where: (name='Drinks')} 
RETURN subcat.name, CONCAT_AGG(sku.name, ', ') AS sku_names 
GROUP BY subcat.name

如果你的OrientDB版本较低(低于3.0),可以用LIST()配合JOIN()来实现拼接:

MATCH {class: SKU, as: sku}-categorizedIn-> {class:Category, as: subcat}<-hasSubcategory-{class: Category, as: cat, where: (name='Drinks')} 
RETURN subcat.name, JOIN(LIST(sku.name), ', ') AS sku_names 
GROUP BY subcat.name

验证结果

修改后执行查询,返回的sku_names列就会显示你指定的SKU属性,而不再是RID了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:10:29