[MongoDB] SyntaxError: Unexpected end of input, Unexpected token } の解決方法

MongoDB shell で SyntaxError: Unexpected end of inputSyntaxError: Unexpected token } というエラーメッセージが発生したときの解決方法をご紹介します。

MongoDB | モンゴディービー

SyntaxError が発生するケース

SyntaxError が発生する MongoDB query のサンプルコードは以下の通りです。

MongoDB query

var sampleFunc = function(str){
  var result = str.replace(/\"+/g, '');
  return result;
}

実行結果

mongodb> var sampleFunc = function(str){
...   var str = 'a"b"c';
...   var result = str.replace(/\"+/g, '');
2019-02-26T13:30:21.665+0000 E QUERY    SyntaxError: Unexpected end of input
mongodb> }
2019-02-26T13:30:21.669+0000 E QUERY    SyntaxError: Unexpected token }

ちなみに、関数定義

function sampleFunc (str){
  var result = str.replace(/\"+/g, '');
  return result;
}

SyntaxError が発生しないケース

関数内で正規表現リテラルを使わない

関数内で /\”+/g のようなダブルクオーテーション ” を含む正規表現リテラルを使わない場合は、SyntaxError が発生しませんでした。

var str = 'a"b"c';
var result = str.replace(/\"+/g, '');

String.prototype.replace()

正規表現リテラル /pattern/flags の pattern 部分に指定してるダブルクオーテーション ” が原因みたいなので、コンストラクタ記法 RegExp を利用するコードに書き換えるとエラーが発生しなくなりました。

var sampleFunc = function(str){
  var result = str.replace(new RegExp('"+', 'g'), '');
  return result;
}

SyntaxError の原因は?

今回は、ダブルクオーテーション ” が原因でしたが、エラーが発生したコードは Node.js repl では正常に動作しました。「恐らく MongoDB reql の処理に問題があるのではないか?」と考えてますが、詳しくコードを確認するには至ってません。

以上、MongoDB shell で SyntaxError が発生して困った現場からお送りしました。

参考情報