【发布时间】:2016-05-21 22:18:49
【问题描述】:
我想知道“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 数组。
似乎要做到这一点,您希望将更改放在某种“事务”中,这样如果一个由于某种原因没有更新,那么另一个也不会。
这是模拟这种情况的典型方法吗?如何处理“交易”部分的情况?
【问题讨论】:
-
那么一本书的每个例子都有它自己的条目?您可能还应该在架构中包含 _id。
-
我认为这是 Mongoose 自动包含的。
-
MongoDB 本身会在服务器上为你注入一个 _id。