我想知道“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>
这是模拟此类情况的典型方法吗?如何应对“交易”部分的情况?
答案 0 :(得分:0)
无法在MongoDB中执行包含多个文档的事务。 您可以考虑单独的Trade集合,其中包含以下文档:
{
book: ...,
ownerUser: ...,
buyerUser: ...,
status: 'pending'
dateSold: null
}
当交易获得批准后,您可以先更改此文档,然后再更新任何相关文档。如果其他方法失败,本文档将决定交易是否确实发生过。