2016-05-21 48 views
0

我想知道「Mongo Way」是用於建模兩個用戶之間的項目的待定交易。如何建模MongoDB中的待定交易?

我有一個用戶集合,我有一個書籍集合。在我的應用程序中,用戶將能夠向彼此提交交易。在交易提議被接受之前,交易需要作爲數據庫中的待交易存儲。

在我看來,最好的選擇是有藍本這樣每本書的文件(使用貓鼬)一個「交易」屬性:

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陣列。

看來,要做到這一點,你希望更改是在某種「交易」,以便如果由於某種原因沒有更新,那麼其他也不會。

這是模擬這種情況的典型方法嗎?如何處理情況的「交易」部分?

+0

那麼書的每個例子都會有它自己的條目?您應該也可以在您的模式中包含_id。 –

+0

我覺得這是自動包含在Mongoose中的。 – alwayslearning

+0

MongoDB本身會在服務器上注入一個_id。 –

回答

0

無法在MongoDB中執行包含多個文檔的事務。 你可能會考慮單獨收集貿易與像文件:

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

當交易被批准,你可以先改變這個文件,然後在下一次更新任何相關文件。如果其他事情失敗了,這份文件將決定交易是否真的發生。

+0

這很有道理,謝謝! – alwayslearning