エラー対策

【mongoDB】message: ‘Cast to number failed for value “undefined” at path “status”‘が出た!【Node.js】

mistake

Node.jsとmongoDBを使用して色々と動かしていたところ、突然表題のエラーが出たことがありました。

そのときはNode.jsもmongoDBも触りたてだったので、初めて体験するNoSQLの簡潔さに少々興奮していたのですが、エラーを見て焦って調査したことを覚えています。

私と同じような方がいらっしゃるかもしれませんので、その際に調べた内容を記事にまとめようと思います。

message: ‘Cast to ○○ failed for value “undefined” at path “□□”‘の意味とは?

このエラーの意味はまさにメッセージの通りです。
つまり、「○○型として定義されている□□に対して、undefinedをキャストすることはできませんよ」ということです。

mongoDBで型をキャストする際に、undefinedをキャストするなどして失敗すると、今回のエラーが発生します。

原因はundefinedをキャストしようとしていたことだった。

私の場合は、以下のようなエラー文となっていました。

Critical Error { CastError: Cast to number failed for value "undefined" at path "status"
  (中略)
   message: 'Cast to number failed for value "undefined" at path "status"',
   name: 'CastError',
   kind: 'number',
   value: undefined,
   path: 'status',
   reason: undefined }

valueがundefinedとなっていますね。

また、この時のソースコードも見てましょう。
だいたい以下のような感じで定義していました。

hoge.prototype.init = function(mongoose){    
    this.schema = new mongoose.Schema({
        name: String,
        password: String,
        created: Number,
        status: Number, 
     });
}

statusというkeyをnumber型で定義していたのですが、そこにundefinedをいれようとしたためにエラーが発生していたのです。

ここまで分かれば、あとはエラーが発生している値にundefinedが保存されないようにするだけです。

私の場合は、初回データ保存時にundefinedになることがあったので、その際は「status: 1」で保存されるように修正したところ、次からはエラーが出なくなりました。

終わりに

今回はmongoDBでの型キャストエラーについてご紹介しました。
mongoDBは気軽に使えるのでサクッとデータを保存したくなるのですが、保存の際は不適切なデータが渡されないように、しっかりとチェックをしたほうが良いでしょう。

本日はここまでです。それでは。