【问题标题】:Mongoose schema designing猫鼬模式设计
【发布时间】:2015-05-20 07:21:32
【问题描述】:

我想为用户设计一个库存。 基本上,我尝试创建一个库存,其中包含一个 user_id 和一个包含每个项目数量的项目列表。

有我的集合“项目”的架构:

 var ItemSchema = new mongoose.Schema({
    name: String,
    image: String,
    effects : {
        attack: String,
        defense: String,
        life: String
       }
    });

我无法设计一个可以轻松更新每个项目的数量并添加新项目的库存集合。

【问题讨论】:

  • 我正在寻找一个很好的模式来代表用户的一种库存。我有我的“ItemSchema”,但我不知道如何设计我的 InventorySchema。我想要一个 ItemSchema 数组,但有一个数字。例如,如果我有两个“帽子”,我不想在我的集合中将名为“帽子”的项目两次命名,但字段“数字”设置为“2”
  • 我的回答好运吗?

标签: node.js mongoose


【解决方案1】:

您可能想要一个“物品”目录,例如您描述的帽子、手套、枪支等。

每个项目都有自己的 ID,然后您必须将该项目引用到您的用户库存架构中:

var UserInventorySchema = new Schema({
        userId:{ type:Schema.Types.ObjectId,
               ref: 'User'
        },
        items:[{
        _id:{
            type:Schema.Types.ObjectId,
            ref: 'Item' // this is the name for your Item Schema 
        },
        Amount:{
            type: Number,
            default:0
        }
    }]
});

在这种情况下,您将有更多的数据库写入和更少的读取,如果您有更多的读取,我建议您坚持使用相同的模型,但只需添加名称就不会这样做填充以带回所有“项目”数据。

【讨论】:

  • 感谢您的回答。我编写此代码是为了更新我的“库存”:Inventory.update( {'userId': req.user._id}, {$addToSet: { "items": {_id: req.body._id, amount: 1}}}, {upsert: true}, function(err, inventory) { if (err) res.status(400).send('Error update inventory); else res.status(204).send(); }); }; 我可以轻松地在我的库存中添加一个项目,但我有一个关于“数量”的问题。我希望能够增加或减少此金额。
  • 当然没问题,我很高兴你成功了
  • 您知道如何在不重复数组中的数据的情况下更改为数量吗?
  • 使用“.$.”在 $set 中,看看这个stackoverflow.com/questions/15691224/…
  • 几乎....Inventory.update( {'id_user': req.user._id, 'items._id': req.body._id}, {$set: { "items.$._id": req.body._id}, $inc: {"items.$.amount": 1}}, {upsert: true}, function(err, inventory) { console.log(inventory); if (err) res.status(400).send(Error.setError('impossible to put in inventory', err)); else res.status(204).send(); }); };现在我可以增加或减少数量...但是如果物品在库存中不存在我会出错
猜你喜欢
  • 2014-12-09
  • 2019-08-07
  • 2016-08-05
  • 1970-01-01
  • 2017-03-31
  • 2014-08-20
  • 2020-09-18
  • 2014-04-01
  • 2012-02-02
相关资源
最近更新 更多