Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用';跳过';多行更新中的选项_Javascript_Node.js_Postgresql_Express_Pg Promise - Fatal编程技术网

Javascript 使用';跳过';多行更新中的选项

Javascript 使用';跳过';多行更新中的选项,javascript,node.js,postgresql,express,pg-promise,Javascript,Node.js,Postgresql,Express,Pg Promise,我是NodeJs新手,尝试使用NodeJs对我的PG数据库执行所有请求。 我希望能够动态更新列,这意味着有时我将只更新一行的两列,有时我将更新所有列,等等。。。 我的输入将是JSON 因为我希望端点能够更新多行,所以我尝试使用带有名称空间的helpers 以下是我的Javascript代码(灵感来自前面的stackoverflow答案): 以下是我正在向端点馈送的JSON: [{ "id" : 25, "firstname": "Step

我是NodeJs新手,尝试使用NodeJs对我的PG数据库执行所有请求。 我希望能够动态更新列,这意味着有时我将只更新一行的两列,有时我将更新所有列,等等。。。 我的输入将是JSON

因为我希望端点能够更新多行,所以我尝试使用带有名称空间的helpers

以下是我的Javascript代码(灵感来自前面的stackoverflow答案):

以下是我正在向端点馈送的JSON:

[{
  "id" : 25,
  "firstname": "Stephen",
  "surname": "Harrison",
  "yob": 1991,
  "defensive_skill": 5,
  "offensive_skill": 3,
  "login": "harry",
  "password": "123456"
},
{
  "id": 26,
  "firstname": "Chris",
  "surname": "Jackson",
  "defensive_skill": 5,
  "offensive_skill": 4,
  "login": "chris",
  "password": "123456"
}
]
下面是错误:

Property 'yob' doesn't exist.

如您所见,在数组的第二个对象中,我没有指定字段“yob”。 我希望对于第二个对象,除了“yob”之外,所有列都会更新。
有什么地方我做错了吗?

它不起作用的原因是
跳过
逻辑只能用于单行更新,如下所示:

由方法
update
(针对单个对象)使用

多行更新语法不允许任何跳过逻辑,因此当缺少属性时,需要提供默认值,如下所示:

{name: 'yob', skip, def: defaultValue}
defaultValue
可以是上面的任何内容,包括
未定义的

或者,您可以使用属性
init
,动态返回值


因此,在上面的代码中,如果将列声明更改为:

{name: 'yob', skip, def: null}
您的
更新
呼叫将生成:

UPDATE "players" AS t SET "firstname"=v."firstname","surname"=v."surname","yob"=v."yob","defensive_skill"=v."defensive_skill","offensive_skill"=v."offensive_skill","login"=v."login","password"=v."password" FROM (VALUES(25,'Stephen','Harrison',1991,5,3,'harry','123456'),(26,'Chr
is','Jackson',null,5,4,'chris','123456')) AS v("id","firstname","surname","yob","defensive_skill","offensive_skill","login","password")

从生成的SQL中可以看出,使用这种语法不可能跳过一列,这就是为什么多行更新会忽略
skip
。但是,如果您一次只传入一个对象,您可以看到它正在工作,但这是一种与您正在寻找的不同的使用场景。

您是插入到一个包含列的表中,还是只插入一列json/jsonb?假设这是一个表关系,它会告诉您,
yob
列不存在,需要添加。@Lucas总共有八列,在更新时,我希望能够分别更新每一列。没有“json/jsonb列”。我认为我的问题与“pg promise”更相关。更正了类型的无效使用,来自
c=>!c、 存在| | c==未定义
c=>!c、 存在| | c.value==未定义。感谢您提供的精确答案,我将一次更新一行,这似乎是最适合我的解决方案,因为我不想设置默认/init值。
UPDATE "players" AS t SET "firstname"=v."firstname","surname"=v."surname","yob"=v."yob","defensive_skill"=v."defensive_skill","offensive_skill"=v."offensive_skill","login"=v."login","password"=v."password" FROM (VALUES(25,'Stephen','Harrison',1991,5,3,'harry','123456'),(26,'Chr
is','Jackson',null,5,4,'chris','123456')) AS v("id","firstname","surname","yob","defensive_skill","offensive_skill","login","password")