【問題】
配列の一要素を削除して、mongoDBに突っ込みたいのだが、イカのエラーが出るでゲソ。
ERROR: { message: 'Cast to string failed for value "hoge,,piyo"', name: 'CastError', type: 'string', value: [ hoge, undefined, piyo ] } DATA: undefined
ちなみにソース
var arr = ['hoge', 'fuga', 'piyo']; for(var i=0; i<arr.length; i++ ){ if(arr[i] == 'fuga'){ delete arr[i]; } } // var someModel = db.model('SomeModelName', someModelSchema); someModel.props = arr; someModel.save(function(err, data){ console.log('ERROR:', err); console.log('DATA:', data); });
【調査】
mongooseで、当該データフィールドの型と制約を以下のように設定しているので、そこに引っかかってると思われ。
var someModelSchema = { props : [String], };
で、突っ込もうとしている値は何かっていうと
undefinedをStringにキャストできないんだってそりゃそうだ。
delete句で配列要素がさっぱり削除されてlengthも一個減るのかと思ったんだが、そうではなく、undefinedがぶち込まれんすね、と。
【解決】
スプライス使うか
こんなかんじで。
var arr = ['hoge', 'fuga', 'piyo']; for(var i=0; i<arr.length; i++ ){ if(arr[i] == 'fuga'){ arr.splice(i,1); } }
【雑感】
JavaScriptはちょうど独学でプログラミングはじめたときから使ってるから、逆にちゃんとドキュメント読んだ事ない。読まずにどうにかしてきちゃったから。今からでも遅くないのでちゃんと読もうと思った。
DRY