2016-04-01 2 views
2

Я новичок в MongoDB и у меня есть модель данных, как такойКак структурировать схему мангуста в схеме?

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

У меня есть «last_updated», а затем гигантский список элементов CSGO храню.

Мой вопрос есть. Нужны ли мне две схемы? Один для двух свойств на внешнем слое и одна схема для моей модели объекта csgo?

Как бы выглядели мои схемы, если бы я сделал это так?

У меня есть схема моего товара, такая как.

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

Нужна ли мне еще одна схема для установки внешней схемы?

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

Это правильно?

+0

'пункт: [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!'); 
}); 

Вы можете также использовать методы, такие как MongooseArray push, unshift, addToSet, чтобы добавить элементы в родительском документе. Например:

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

Смежные вопросы