如何在Mongoose模式中嵌套另一个模式?

5

我是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,
});

这是否正确?


item: [ItemSchema] - Blakes Seven
那么我应该如何向我的CsgoSchema添加一个物品? - Garuuk
1个回答

9

由于您已经将项目模式定义为

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方法,例如pushunshiftaddToSet 将项目添加到父文档中。例如:
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});

1
谢谢!解释清晰。我正在围绕这些概念构建。非常感谢! - Garuuk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接