我是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 :(得分:5)
由于您已将项目架构定义为
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的create方法将项目添加到csgo文档:。
var newcsgo = csgo.items.create({name: 'name', price: 1});