Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.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
Mongodb 如何将bash数组变量添加到mongo更新查询_Mongodb_Bash - Fatal编程技术网

Mongodb 如何将bash数组变量添加到mongo更新查询

Mongodb 如何将bash数组变量添加到mongo更新查询,mongodb,bash,Mongodb,Bash,我正在编写一个更新mongo文档的bash脚本。如果它是一个新文档,那么它会在mongo中创建一个新文档,否则会更新它。 我想将bash数组变量传递给mongo查询,因为很少有字段是数组类型的。我不知道如何通过数组字段。任何帮助都将不胜感激。 这是我的疑问: db.my_col.update({emp_id:''''$emp_id'''},{$set:{contacts:''${contacts}',emp_name:'''''}},{upsert:true}) 如果我只是像普通变量一样添加变量

我正在编写一个更新mongo文档的bash脚本。如果它是一个新文档,那么它会在mongo中创建一个新文档,否则会更新它。 我想将bash数组变量传递给mongo查询,因为很少有字段是数组类型的。我不知道如何通过数组字段。任何帮助都将不胜感激。 这是我的疑问:
db.my_col.update({emp_id:''''$emp_id'''},{$set:{contacts:''${contacts}',emp_name:'''''}},{upsert:true})


如果我只是像普通变量一样添加变量中唯一的第一个值。

如果将数组变量放入字符串中,则只有第一个项会出现,对吗

基本上,您可以使用此语法
${contacts[@]}
获取所有这些联系人,但它们将被取消引号并用空格分隔,并且可能由于语法错误而无法在查询中工作

因此,您需要手动将Bash数组转换为JS数组。我不知道一种自动的方式来做,但是考虑这个功能:

函数数组{
res=“”
对于${@};中的
res=“$res,\”$a“”
完成
回声[${res:1}]
}
它遍历它的参数,将每个参数用引号括起来,并用逗号连接在一起

这样使用它(我假设
$contacts
是一个字符串值数组):

IFS=“”
联系人=(“skype名称”“电子邮件地址”电话网站)
jscontacts=$(jsarray$contacts[@])
#继续在查询中使用$jscontacts。
之后,
$jscontacts
将是一个字符串值,
[“skype名称”、“电子邮件地址”、“电话”、“网站”、“任何内容”]

注意事项:

IFS=”“
-
IFS
代表
内部字段分隔符
,这就是Bash如何将参数彼此分离的。默认情况下,它是
(一个空格)。将其重置为零以保留包含空格的数组项;否则,“skype名称”将包含两个单独的“skype”和“名称”值

${res:1}
-跳过
$res
中的第一个字符(因为它是逗号)


jscontacts=$(…)
将终端输出捕获到一个
jscontacts
变量中。

如果将数组变量放入一个字符串中,则只有第一项会出现,对吗

基本上,您可以使用此语法
${contacts[@]}
获取所有这些联系人,但它们将被取消引号并用空格分隔,并且可能由于语法错误而无法在查询中工作

因此,您需要手动将Bash数组转换为JS数组。我不知道一种自动的方式来做,但是考虑这个功能:

函数数组{
res=“”
对于${@};中的
res=“$res,\”$a“”
完成
回声[${res:1}]
}
它遍历它的参数,将每个参数用引号括起来,并用逗号连接在一起

这样使用它(我假设
$contacts
是一个字符串值数组):

IFS=“”
联系人=(“skype名称”“电子邮件地址”电话网站)
jscontacts=$(jsarray$contacts[@])
#继续在查询中使用$jscontacts。
之后,
$jscontacts
将是一个字符串值,
[“skype名称”、“电子邮件地址”、“电话”、“网站”、“任何内容”]

注意事项:

IFS=”“
-
IFS
代表
内部字段分隔符
,这就是Bash如何将参数彼此分离的。默认情况下,它是
(一个空格)。将其重置为零以保留包含空格的数组项;否则,“skype名称”将包含两个单独的“skype”和“名称”值

${res:1}
-跳过
$res
中的第一个字符(因为它是逗号)


jscontacts=$(…)
将终端输出捕获到
jscontacts
变量中。

为什么需要bash变量?不能使用js变量吗?为什么需要bash变量?你不能使用js变量吗?