84669 orang belajar
152542 orang belajar
20005 orang belajar
5487 orang belajar
7821 orang belajar
359900 orang belajar
3350 orang belajar
180660 orang belajar
48569 orang belajar
18603 orang belajar
40936 orang belajar
1549 orang belajar
1183 orang belajar
32909 orang belajar
我用cat命令分行读取js文件,将其中内容传递给mongo时,如果单行文本过长,则往往会出现“unexpected identifier"之类的错误,但是用mongo直接处理js文件时则没有这类问题。
学习是最好的投资!
cat 能够读取的文本长度没有限制。而且 cat (默认参数)根本不管文件有多少行;它只是在不断地复制数据而已。
cat
问题出在 mongo shell 使用的 linenoise 库。在 <mongo>/shell/linenoise.cpp:2541 (不同版本可能有差异)处,如果不是从终端获取数据,linenoise 总是按每行最多 4096 字节(UTF-8)来取,所以 mongo 读到了被断开的行(linsenoise 根本没考虑过它这样做会把某些行断开;也许他们根本没有测试过非交互使用的情况)。
<mongo>/shell/linenoise.cpp:2541
至于从终端读取的时候,它使用的是另外一套逻辑。我尝试放一个 4100 字符的超长行时,它就在那里不停地闪啊闪啊闪啊就是没结果。不知道这部分有没有问题,反正我是没办法测试了。提问者也许可以试试直接输入超长行。
我试过 readline(Python 者),一切正常,超长行也能较容易地输入并得到正确的解析。zsh 和 bash 等经常从管道读脚本的当然也会好好处理这些情况。
cat
能够读取的文本长度没有限制。而且cat
(默认参数)根本不管文件有多少行;它只是在不断地复制数据而已。问题出在 mongo shell 使用的 linenoise 库。在
<mongo>/shell/linenoise.cpp:2541
(不同版本可能有差异)处,如果不是从终端获取数据,linenoise 总是按每行最多 4096 字节(UTF-8)来取,所以 mongo 读到了被断开的行(linsenoise 根本没考虑过它这样做会把某些行断开;也许他们根本没有测试过非交互使用的情况)。至于从终端读取的时候,它使用的是另外一套逻辑。我尝试放一个 4100 字符的超长行时,它就在那里不停地闪啊闪啊闪啊就是没结果。不知道这部分有没有问题,反正我是没办法测试了。提问者也许可以试试直接输入超长行。
我试过 readline(Python 者),一切正常,超长行也能较容易地输入并得到正确的解析。zsh 和 bash 等经常从管道读脚本的当然也会好好处理这些情况。