なっく日報

技術やら生活やらのメモ

mongo shellは一行あたり4096バイトまでしか読み取れない

こちらにissueがあがってますが、MongoDB v1.9(2011年初頭)くらいから存在している由緒正しい問題のようです。

[SERVER-13980] Interactive shell truncates line input longer than 4096 bytes - MongoDB

再現コード

aaaaaaaaの長さは4087文字以上。

hoge.js

print('aaaaaa(中略)aaaaaa');

実行

mongo < hoge.js

結果

❯ mongo < hoge.js
MongoDB shell version: 3.2.1
connecting to: test
2016-01-27T19:30:43.184+0900 E QUERY    [thread1] SyntaxError: unterminated string literal @(shell):1:6

2016-01-27T19:30:43.185+0900 E QUERY    [thread1] SyntaxError: unterminated string literal @(shell):1:0

bye

なぜこんなことに?

[SERVER-2792] replace readline with linenoise - MongoDB

にて、readline→linenoiseに置き換えたのが原因のよう。

github.com

Redisの作者が作っているライブラリですね。

Redis、MongoDB、Androidで使われていると書いています。

このライブラリの一行あたり読み込むバイト数が決め打ちになっているからっぽいです。

ということは

Redis、Androidでも問題出ることもあるかもしれません。

まあ、改行入れれば解決なので、そんな問題にならんかもですが。