2016-04-01 11 views
2

私はMongoDBのために新たなんだと私は私が「last_updatedです」と、私は保存csgo項目の巨大なリストをしているようにスキーマ内でマングーススキーマを構造化する方法は?

{ 
    last_updated: Date.now(), 
    csgo_items:[ 
     {name: 'name', price: 1}, 
     {name: 'name', price: 1}, 
     {name: 'name', price: 1} 
    ] 
} 

のようなデータモデルを持っています。

私の質問です。 2つのスキーマが必要ですか?外側のレイヤーの2つのプロパティーとcsgoアイテムモデルの1つのスキーマの1つです。

このようにした場合、私のスキーマはどのように見えますか?

私はそのようなアイテムスキーマを持っています。

var ItemSchema = new Schema({ 
    price: Number, 
    name: String, 
}); 

私の外側のスキーマを設定するために、別のスキーマも必要ですか?

var CsgoSchema = new Schema({ 
    last_updated: Date, 
    item: Array, 
}); 

これは間違いありませんか?

+0

'item:[ItemSchema]' –

+0

私はCsgoSchemaにアイテムをどのように追加しますか? – Garuuk

答えて

3

あなたが親文書のアイテムの配列の要素を持っている

var ItemSchema = new Schema({ 
    price: Number, 
    name: String 
}); 

としてあなたの商品・スキーマを定義しているので、あなたがアイテムを追加したい場合は、あなたが

var CsgoSchema = new Schema({ 
    last_updated: Date, 
    items: [ItemSchema] 
}); 

として親スキーマを定義することができます親文書配列にCsgoモデルに追加する前に各項目を個別に保存する必要はありません。これは最上位の親文書が保存されるたびに行われます。たとえば、

var Csgo = mongoose.model('Csgo', CsgoSchema); 
var csgo = new Csgo({ 
    last_updated: new Date(), 
    items: [ 
     {name: 'name1', price: 1}, 
     {name: 'name2', price: 2}, 
     {name: 'name3', price: 3} 
    ] 
}); 

csgo.save(function (err) { 
    if (err) return handleError(err) 
    console.log('Success!'); 
}); 

また、親文書にアイテムを追加するために、このようなpushunshiftaddToSetとしてMongooseArrayメソッドを使用することができます。例:

var Csgo = mongoose.model('Csgo', CsgoSchema); 
var csgo = new Csgo; 

// add an item using push 
csgo.items.push({name: 'name4', price: 4}); 
var csgo_item = csgo.items[0]; 
console.log(csgo_item); // { _id: '56e2bc9f61fb33583128be07', name: 'name4', price: 4 } 
csgo_item.isNew; // true 

csgo.save(function (err) { 
    if (err) return handleError(err) 
    console.log('Success!'); 
}); 

また、MongooseArraysの作成メソッドを使用して、アイテムをcsgoドキュメントに追加することもできます。

var newcsgo = csgo.items.create({name: 'name', price: 1}); 
+1

ありがとう!明確な説明。私はこれらの概念を構築しています。とても有難い! – Garuuk

関連する問題