Pg promise 跳过源中未传递的更新列

Pg promise 跳过源中未传递的更新列,pg-promise,Pg Promise,列名的字符串或helpers中是否有语法。设置接口以跳过数据源中不存在的属性的列 现在,我需要创建ColumnConfig作为 newhelpers.Column({name,skip:c=>!c.exists}) 对于每个可能的列 有这样的东西会很好: pgp.helpers.sets(values, SomeRepository.cs.update, skipNonExisting); 或者至少: pgp.helpers.ColumnSet(['column1*', 'column2*']

列名的字符串或
helpers中是否有语法。设置
接口以跳过数据源中不存在的属性的列

现在,我需要创建ColumnConfig作为
newhelpers.Column({name,skip:c=>!c.exists})
对于每个可能的列

有这样的东西会很好:

pgp.helpers.sets(values, SomeRepository.cs.update, skipNonExisting);
或者至少:

pgp.helpers.ColumnSet(['column1*', 'column2*']);
其中*(或任何其他方便符号)表示列在源代码中是可选的,并且不抛出
“属性'name'不存在。”

对于
helpers.set
(不适用于
update
,因为我有一些非常重要的更新SQL)

如文档所述()当未指定集合中的列param时,将使用数据对象的属性


这很好,直到我需要为某些列设置特殊格式,然后设置仅适用于列集合中已定义的列(如果指定)。

在现代JavaScript中,只需一行,您就可以轻松地缩写内容

因此,要将列名列表转换为可选列列表:

const cndCols = arr => arr.map(name => ({name, skip: c => !c.exists}));
声明对象:

这并不比问题中提出的解决方案复杂

helpers.set需要这个(不需要更新,因为我有一些非常重要的更新SQL)


为此,您可以创建并使用两个独立的对象。

好的,这与我的第二个建议基本相同。但是第一个建议是最简单的:pgp.helpers.set(value,SomeRepository.cs.update,skipNonExisting);根本不需要列出所有列。好的,可以从源中检索键,然后筛选列集。@TihomirMagdic列名为string已支持条件列的
?name
,为不同的条件检查添加
*
会造成混淆。带前缀的列?在集合中被忽略,因此在这种情况下没有帮助。@TihomirMagdic我不懂。你需要澄清最后一句话。@TihomirMagdic你以前误解我了。我说我们已经在字符串格式中有了一个条件符号,为其他内容添加另一个条件符号会造成混乱。无论如何,我提供的解决方案就是您在本例中需要的所有解决方案。
在我需要对某些列进行特殊格式设置之前,它可以正常工作,然后set仅适用于指定的列集合中定义的列。
我不确定这里的问题是什么。添加一个示例会有所帮助。
const cs = pgp.helpers.ColumnSet(cndCols(['column1', 'column2']));