【问题标题】:How to structure mongoose schema within a schema?如何在模式中构建猫鼬模式?
【发布时间】:2016-04-02 01:02:06
【问题描述】:

我是 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]
  • 那么我如何将一个项目添加到我的 CsgoSchema 中?

标签: mongoose


【解决方案1】:

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

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});

【讨论】:

  • 谢谢!解释清楚。我正在围绕这些概念进行构建。非常感谢!
猜你喜欢
  • 2021-09-21
  • 2012-04-22
  • 2012-02-02
  • 2018-10-26
  • 2016-08-05
  • 2015-03-25
  • 1970-01-01
  • 2016-11-18
相关资源
最近更新 更多