我使用Mongoose在MongoDB中有一个类似下面的模型:
Stuff
{
_id: ObjectId...,
stuff: String..,
someBoolean: Boolean,
description: String,
transactionsOfThisStuff: [{
trnsactionNumber: objectId?
date: Date.now()
info: String
}]
}
正如你所看到的,想法是移动东西,我需要记录每一个动作,所以我做了一系列的交易"我保留历史的地方。
进行"交易"有一些要求,例如," someBoolean"必须具有一定的价值等 当进行交易时,必须更新某些东西的值。
另外,我必须能够同时移动多个东西(移动一个桌子,一个plumbus等),所以它们都将具有相同的" transactionNumber"在每个文件中。
我在这个模型中看到的问题是,我不能轻易地列出最后10个动作,或者我没有找到有效的方法来获取已经移动的Stuff" transactionNumber"
如果使用两种型号:
Stuff
{
_id: ObjectId...,
stuff: String..,
someBoolean: Boolean,
description: String,
}
transaction
{
_id: objectId,
date: Date.now(),
info: String,
stuff: [{type:ObjectId, ref: 'Stuff', requiered: true}]
}
这个想法的问题是,我需要ACID,因为如果移动多个Stuff,我需要更新" Stuff" :/
编辑:
我保存了硬件部件,如CPU,鼠标,键盘,显示器等。每个部件都存储在"逻辑"仓库。我可以制作不同类型的"交易",比如将它移到另一个仓库,交给一个人,收回它等等。每个交易都必须被跟踪,所以我可以拥有该项目的历史记录。此外,我可以在同一交易中同时移动多个项目,例如在交易编号21361764中我移动了10个不同的项目。同时,我需要更新项目中的一些信息,如isStored:False,True。
事务本身必须具有执行日期,客户端,用户(正在执行事务)和项目数组等。
编辑上面的想法是我到目前为止所得到的,但每个人都有问题,因为我需要交易。必须有办法解决这个问题,而不必涉及关系数据库。