message: 'Cast to string failed for value ","【mongoDB】【mongoose】【JavaScript】【delete】
【問題】
配列の一要素を削除して、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