33

node.js アプリケーションで MongoDB の ODM として Mongoose の使用を開始しようとしています。値を追加しないと、空の配列 "[]" が Mongo に格納される埋め込みドキュメントを含むスキーマを設計するときに気付きました。どうしてこれなの?履歴の変更をレコードに保存しようとしていますが、空の配列はその変更が値を削除したことを意味します。サンプル スキーマを次に示します。

schema.Client = new mongoose.Schema({
    name:{type:String, required:true},
    products:[{
        name:{type:String, index:true},
        startDate:Date,
        endDate:Date
    }],
    subdomain:{type:String, index:{unique:true}},
})

名前とサブドメインだけでドキュメントを保存した結果のドキュメントを次に示します。

{
    "name": "Smith Company",
    "products": [],
    "subdomain": "smith"
}

デフォルトで空の配列を持つ製品が追加されるのはなぜですか?どうすれば停止できますか?

4

5 に答える 5

21

空の配列は、モデルに要素を追加または削除する便利な方法を提供します。

$push $addToSet $pullin update は、配列要素を管理するのに役立ちます。

空の配列がない場合、要素をプッシュすることはできませんnull

ただし、空の配列では可能です。

于 2012-09-30T15:17:10.107 に答える
3

これは仕様によるものと思われますが、「pre」ハンドラーを使用してデフォルトの空の配列を削除する回避策があります: https://github.com/LearnBoost/mongoose/issues/1335

ただし、これはフィールドを に設定した場合にのみ機能しましたnull。サンプルコードのように設定するとundefined、空の配列が戻ってくるようです。

于 2013-09-03T19:55:17.413 に答える
0

スキーマでは、製品をオブジェクトの配列として定義しているためです。次のようなことを試す必要があります。

products: {
        name:{type:String, index:true},
        startDate:Date,
        endDate:Date
    },

これにより、配列ではなく空のオブジェクトが格納されます。

于 2012-09-30T02:35:58.327 に答える