2017-12-09 8 views
1

これはおそらく愚かな質問ですが、私はノードとpostgresqlを初めて使うので、苦労しています。列名が一致しないオブジェクトを挿入する

Iは蛇腹例として、データベースに複数のオブジェクトを挿入するpgp.helpers.insertを使用しようとしています:インサート上記のコードはjsonbとしてmycolumnmytable 2列に

users = [{mycolumn:{name: 'John', age:23}}, {mycolumn:{name: 'Mike', age: 30}}]; 
query = pgp.helpers.insert(users, ['mycolumn:json'], 'mytable'); 
// insert into "mytable"("mycolumn") values('{"name":"John","age":23}'),('{"name":"Mike","age":30}') 

しかし、私は、次のような、私の元のオブジェクトをラップすることなく、まっすぐmycolumnにオブジェクトの配列内の値を挿入しようとしています:オブジェクトが「doesnのため、

それは動作しませんもちろん
users = [{name: 'John', age:23}, {name: 'Mike', age: 30}]; 
query = pgp.helpers.insert(users, ['mycolumn:json'], 'mytable'); 
// Error: Property 'mycolumn' doesn't exist. 

t mycolumn属性が含まれています。しかし、私の配列では、元々のオブジェクトを列名でラップすることは、エレガントではないと思います。特に、私は何百万という行を扱っています(もちろん、バッチで作業しています)。

ありがとうございます。

答えて

1

あなたはColumn構文に従って、あなたの列に次の定義を使用することができます。

const cs = new pgp.helpers.ColumnSet([ 
    { 
     name: 'mycolumn', 
     init: c => c.source 
    } 
], {table: 'mytable'}); 

すなわち

{ 
    name: 'mycolumn', 
    init: c => c.source // use the source object itself 
} 

をし、それを使用します。

const query = pgp.helpers.insert(users, cs); 

なお、当社は、修飾子を指定していません - mod: ':json' m initであり、オブジェクトはデフォルトでJSONとしてフォーマットされています。

関連する問題