2017-03-10 8 views
1

私はmongooseスキーマでデフォルトの配列サイズと値を設定しようとしていますが、ドキュメントに実際にデータがない限り、返り値は常に[]と表示されます。Mongooseのデフォルトの配列サイズと値の設定

"transform": { type: [ Number ], default: [0, 0, 0] } 

戻り値は次のとおりです。

それは返すので、私は私のスキーマを設定するにはどうすればよい
"transform":[] 

"transform":[0,0,0] 

回答: はrequired: trueを設定するには、新しいドキュメントにデータを追加します作成した。ただし、古い文書は更新されません。すぐに私のデータの問題を解決するには

"transform": { type: [ Number ], default: [0, 0, 0], required: true } 

更新 私は次の行を使用して、すべての既存のドキュメントをアップグレードするにはMongoの上のアップデートを実行しました。

db.getCollection('objects').updateMany(
    { "properties.transform": []}, 
    { $set: { "properties.transform" : [0,0,0] }} 
); 

注:私のフィールドを変換するので、まあその、あなたが設定したスキーマに真に必要ないずれか"properties.transform"

+1

ゼロは空白と見なされます – Remario

+0

これをオーバーライドするにはどうしますか?私は1,1,1を使用することができます(ちょうどテストされ、それは動作します)が、理想的ではありません。 – stuffyjoelab

+0

[なぜ私のスキーマがmongoose配列にデフォルト値を追加しないのですか?](http://stackoverflow.com/questions/31845282/why-doesnt-my-schema-to-add-default-values-in -mongoose-arrays) –

答えて

1

プロパティの子です。 falseの場合はデフォルトで空になります。この場合両方の方法を空にすることも、値を指定することもできません。

あなたが使用できるハックはこれです。 trueに設定するだけで、データ入力時に最初に0の配列がプッシュされます。

model.push([0,0,0]); 
+0

私は以前に生成されたドキュメントをテストしていましたが、デフォルトで0に設定されたアップデートを実行してtrueを必要としましたが、新しいドキュメントは[0,0,0]を返しました – stuffyjoelab

+1

nice bro!それ以前に生成された文書 – Remario

関連する問題