Mongodb 如何将bash数组变量添加到mongo更新查询
我正在编写一个更新mongo文档的bash脚本。如果它是一个新文档,那么它会在mongo中创建一个新文档,否则会更新它。 我想将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}) 如果我只是像普通变量一样添加变量
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变量吗?