2016-05-21 2 views
0

「Mongo Way」は、2人のユーザー間でアイテムの保留中の取引をモデル化するためのものです。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 } 
    }] 
}); 

私はこれを見問題は、それが関与するということです取引が承認されたときに2つの文書を更新する。取引が受け入れられると仮定すると、各文書のownerUserを変更する必要があり、trades配列をクリアする必要があります。

これを行うと、何らかの理由で更新されなかった場合でも、もう1つも更新されないように、変更を「トランザクション」にすることが望ましいと思われます。

これは、このような状況をモデル化する典型的な方法ですか?状況の「取引」部分について何をすべきか?

+0

したがって、本の各例には独自のエントリがありますか?おそらくスキーマに_idも含めるべきです。 –

+0

モンゴースにはそれが自動的に含まれていると思います。 – alwayslearning

+0

MongoDB自体があなたのために_idをサーバーに挿入します。 –

答えて

0

MongoDBで複数のドキュメントを含むトランザクションを行う方法はありません。貿易はあなたが次のいずれかの関連文書を更新した後、最初にこの文書を変更することができます承認されると

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

: あなたのような文書を別の貿易コレクションを検討するかもしれません。何かが失敗した場合、この文書は取引が実際に起こったかどうかを決定するでしょう。

+0

それは意味がある、ありがとう! – alwayslearning

関連する問題