如何在MongoDB中建立待定交易的模型?

时间:2016-05-21 14:02:20

标签: mongodb mongoose

我想知道“Mongo Way”用于建模两个用户之间项目的待定交易是什么。

我有一个用户集合,我有一个图书集。在我的应用程序中,用户将能够提出彼此的交易。在交易提案被接受之前,交易需要存储为数据库中的待处理交易。

在我看来,最好的选择是在每个书籍文档上建立一个“交易”属性(使用Mongoose):

const booksSchema = new Schema({
  title: { type: String, required: true },
  createdAt: { type: Date, 'default': Date.now },
  updatedAt: { type: Date, 'default': Date.now },
  author: { type: String, required: false},
  imageUrl: { type: String, required: false},
  ownerUser: { type: Schema.ObjectId, required: true },
  trades: [{
    fromUser: { type: Schema.ObjectId, required: true },
    bookOffered: { type: Schema.ObjectId, required: true }
  }]
});

我看到的问题是,当交易被接受时,它将涉及更新两个文件。假设交易被接受,则需要更改每个文档的ownerUser,并且需要清除trades数组。

为了做到这一点,您似乎希望更改处于某种“交易”中,这样​​如果由于某种原因没有更新,那么另一个也不会。“/ p>

这是模拟此类情况的典型方法吗?如何应对“交易”部分的情况?

1 个答案:

答案 0 :(得分:0)

无法在MongoDB中执行包含多个文档的事务。 您可以考虑单独的Trade集合,其中包含以下文档:

{
   book: ...,
   ownerUser: ...,
   buyerUser: ...,
   status: 'pending' 
   dateSold: null
}

当交易获得批准后,您可以先更改此文档,然后再更新任何相关文档。如果其他方法失败,本文档将决定交易是否确实发生过。