1

我有一个 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 解释器之前它们会一直留在那里?

4

1 回答 1

2

直接调用mongo比尝试将引用的所有内容传递给要简单得多xargs

while IFS=';' read id firstName; do
    mongo localhost/test \
      --eval "db.test.update({_id: $id}, {name: \"$firstName\"})"
done < file.csv
于 2013-04-04T23:05:47.707 回答