如何在架构内构造猫鼬架构?

Gar*_*uuk 4 mongoose

我是mongodb的新手,我有一个像这样的数据模型

{
    last_updated: Date.now(),
    csgo_items:[
        {name: 'name', price: 1},
        {name: 'name', price: 1},
        {name: 'name', price: 1}
    ]
}
Run Code Online (Sandbox Code Playgroud)

我有一个“ last_updated”,然后有一个巨大的csgo物品清单。

我的问题是。我需要两个模式吗?一个是外层的两个属性,另一个是我的csgo项目模型的架构?

如果我这样做,我的模式将如何显示?

我有这样的项目架构。

var ItemSchema = new Schema({
    price: Number,
    name: String,
});
Run Code Online (Sandbox Code Playgroud)

我是否还需要另一个模式来为我的外部模式设置?

var CsgoSchema = new Schema({
    last_updated: Date,
    item: Array,
});
Run Code Online (Sandbox Code Playgroud)

它是否正确?

chr*_*dam 6

由于您已将项目架构定义为

var ItemSchema = new Schema({
    price: Number,
    name: String
});
Run Code Online (Sandbox Code Playgroud)

其中包含父文档项目数组的元素,您可以将父架构定义为

var CsgoSchema = new Schema({
    last_updated: Date,
    items: [ItemSchema]
});
Run Code Online (Sandbox Code Playgroud)

当您想将项目添加到父文档数组中时,不必在将每个项目添加到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!');
});
Run Code Online (Sandbox Code Playgroud)

您还可以使用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!');
});
Run Code Online (Sandbox Code Playgroud)

您还可以使用MongooseArrays的create方法将项目添加到csgo文档中:

var newcsgo = csgo.items.create({name: 'name', price: 1});
Run Code Online (Sandbox Code Playgroud)