跳到主要内容

在 Code 节点中保留关联

引用前面节点时,需要确定使用哪个数据项,这由数据项关联解决。多数节点会自动将每个输出数据项关联到输入数据项,形成可向前回溯的关联链。概念详解见数据项关联概念,本文侧重实际用法示例。

使用 Code 节点时,某些场景需要手动提供关联信息,才能在后续工作流中使用 $("<node-name>").item。这些情况仅适用于多个输入数据项,单个数据项的关联由 n8n 自动处理。

需要手动处理的场景包括:

  • 添加新数据项:新数据项尚未关联到任何输入。
  • 返回新建的数据项。
  • 希望手动控制数据项关联。

其他场景由 n8n 的自动数据项关联处理。

要控制关联,在返回数据时设置 pairedItem。例如,关联到索引为 0 的数据项:

[
{
"json": {
. . .
},
// The index of the input item that generated this output item
"pairedItem": 0
}
]

pairedItem 使用示例 ​

对于以下输入数据:

[
{
"id": "23423532",
"name": "Jay Gatsby"
},
{
"id": "23423533",
"name": "José Arcadio Buendía"
},
{
"id": "23423534",
"name": "Max Sendak"
},
{
"id": "23423535",
"name": "Zaphod Beeblebrox"
},
{
"id": "23423536",
"name": "Edmund Pevensie"
}
]

使用它生成新的数据项,只包含名称,并加入一条新数据:

newItems = [];
for(let i=0; i<items.length; i++){
newItems.push(
{
"json":
{
"name": items[i].json.name,
"aBrandNewField": "New data for item " + i
}
}
)
}

return newItems;

newItems 是没有 pairedItem 的数据项数组,因此无法从这些数据项回溯到生成它们的数据项。

添加 pairedItem 对象:

newItems = [];
for(let i=0; i<items.length; i++){
newItems.push(
{
"json":
{
"name": items[i].json.name,
"aBrandNewField": "New data for item " + i
},
"pairedItem": i
}
)
}
return newItems;

现在,每个新数据项都关联到用于创建它的数据项。

相关资源 ​

本文为社区中文翻译。查看对应英文原文