使用 mongoose Schema 向已声明的 MongoDB 对象添加值

Adding value to already declared MongoDB object with mongoose Schema

我是 MongoDB 和猫鼬的新手。我正在尝试创建一个 Node & MongoDB 拍卖应用程序。所以既然它实际上是一个在线拍卖,用户应该可以为物品出价。我成功完成了用户注册、登录页面和身份验证过程,但是,我有点卡在投标页面。

我使用 mongoose 创建了一个架构,每个拍卖项目都保存在数据库中。我想在 MongoDB 中的同一对象中添加每个出价的用户的名称和价格,如下所示:

{
    name: "valuable vase from 1700s",
    owner: "John Doe",
    itemId: 100029,
    bids: {
        100032: 30000,
        100084: 34000
    }
}

因此每个用户都会有像 100032: 30000 这样的 ID,当他们出价时,他们的“帐户 ID:价格”将被添加到项目的数据库对象中的 bids 下。

我做了一些研究并找到了一些解决问题的方法,但我想知道我想做的事情是否可行,是否是正确的解决方案。

谢谢你给我时间!

您决定实现功能的方式有点复杂。

这并非不可能,但更好的方法是使用对象数组而不是像这样的单个对象:

{
  name: '',
  ..
  ..
  bids: [{
    user: 100032,
    price: 30000
  }, {
    user: 100084,
    price: 34000
  }]
}

确实有几种方法可以实现您想要的。

在我看来,一个名为 ItemBids 的集合,其中每个文档都包含此数据结构,将使您受益最大。

{
   itemId: ObjectId # reference to the item document
   accountId: ObjectId # reference to the account
   bid: Number # the bid value
}

此模式适合您的情况,因为您可以根据需要轻松查询出价 - 可以获取所有的账号出价,可以获取所有的商品出价,可以按出价与原生Mongo排序

每次出价时,您都会向该集合中插入一个新文档。

另一个选项是在项目对象中嵌入一组 Bids 对象。 每个出价对象应包括:

bids: [{
   account: ObjectId("") # This is the account
   price: Number
}]

这里的缺点是查询和访问它需要更复杂的查询。

您可以阅读有关注意事项的更多信息 这里: https://docs.mongodb.com/manual/core/data-model-design https://coderwall.com/p/px3c7g/mongodb-schema-design-embedded-vs-references