我有一个CSV,其中值以分号分隔。 我需要将该CSV中的数据传输到MongoDB数据库中的现有集合,这在此问题上实际上是无关的。
为了方便起见,我将使用该CSV中的一个示例行:
echo '1243;firstName' | sed "s:\([0-9]*\)\;\(.*\):mongo localhost/test --eval \\\\'db.test.update({_id\: \1}, {name\: \"\2\"})\\\\':" | xargs -I {} sh -c "{}"
MongoDB shell version: 2.2.0
connecting to: localhost/test
Thu Apr 4 22:50:10 ReferenceError: firstName is not defined (shell eval):1
问题是,当查询到达MongoDB解释器时,它没有转义。
我已经尝试在每个引号前添加最多3个反斜杠,但没有任何改变。我应该如何正确地转义引号,以便它们保持在那里直到查询到达MongoDB解释器?
答案 0 :(得分:2)
直接拨打mongo
比尝试将所有引用恰到好处传递给xargs
要简单得多:
while IFS=';' read id firstName; do
mongo localhost/test \
--eval "db.test.update({_id: $id}, {name: \"$firstName\"})"
done < file.csv