Node.js 从列集访问源对象

Node.js 从列集访问源对象,node.js,pg-promise,Node.js,Pg Promise,当导入具有ColumnSet中某列的initCB属性的数据时,我尝试拆分记录集中的子对象 但是,当我对两个不同的目标名称使用两个不同的init函数,但只有一个源时,我得到了相同的结果 const cs=new pgp.helpers.ColumnSet([ “id”, {name:'source_id',prop:'source',init:function(obj){return obj.value.id;}}, {name:'source_name',prop:'source',init:f

当导入具有ColumnSet中某列的initCB属性的数据时,我尝试拆分记录集中的子对象

但是,当我对两个不同的目标名称使用两个不同的init函数,但只有一个源时,我得到了相同的结果

const cs=new pgp.helpers.ColumnSet([
“id”,
{name:'source_id',prop:'source',init:function(obj){return obj.value.id;}},
{name:'source_name',prop:'source',init:function(obj){return obj.value.name;},
],{table:'test_table'});
常数数据=[
{id:1,源:{id:1,名称:'source1'},
{id:2,源:{id:1,名称:'source1'},
{id:3,源:{id:2,名称:'source2'},
];
const insert=pgp.helpers.insert(数据,cs);
结果是:

插入到“测试表”(“id”、“源id”、“源名称”)值中
(1,'source1','source1'),
(2,'source1','source1'),
(3、'source2'、'source2')
而不是预期的:

插入到“测试表”(“id”、“源id”、“源名称”)值中
(1,1,'source1'),
(2,1,'source1'),
(3,2,'source2')
这似乎是对同一源字段的第二次回调函数调用覆盖了对该源字段的另一个回调函数的上一次调用的结果

我怎样才能避免这种情况?
或者在导入过程中还有另一种拆分子对象的方法?

Option
prop
不能以这种方式工作。它可以将
重新映射到不同的属性名称,但不提供直接对象引用

而是使用的属性
source
,来引用源对象。具有讽刺意味的是,您还调用了数据
source
中的属性,这意味着您必须在引用中使用
source
两次:

const cs = new pgp.helpers.ColumnSet([
    'id',
    {name: 'source_id', init: c => c.source.source.id},
    {name: 'source_name', init: c => c.source.source.name}
], {table: 'test_table'});
第一个
source
pgpromise
API支持的,第二个是您的数据列名称:)

此外,根据,API将
source
this
设置为相同,因此如果您更喜欢ES5函数语法(示例中看起来更简洁),则可以执行以下操作:

const cs = new pgp.helpers.ColumnSet([
    'id',
    { name: 'source_id', init: function() {return this.source.id;}},
    { name: 'source_name', init: function() {return this.source.name;}},
], { table: 'test_table' });
上面我们在源数据对象上有
这个