Вот моя модель ставок.
const BidSchema = new Schema({
auctionKey: {
type: mongoose.Types.ObjectId,
ref: "Auction",
required: true
},
amount: { type: String, required: true },
userName: { type: String, required: true },
});
И вот моя модель аукциона (обратите внимание на взаимосвязь между этими двумя моделями).
const AuctionSchema = new Schema({
title: { type: String, required: true },
startDate: { type: Date, required: true },
closeDate: { type: Date, required: true },
initialBidAmount: { type: Number, required: true },
bidIncrementAmount: { type: Number, required: true },
bids: [
{
type: mongoose.Types.ObjectId,
ref: 'Bid'
}
]
});
Когда пользователь делает ставку на любой аукцион Я сохраняю ставку в коллекции заявок и обновляю коллекцию аукционов, используя mon goose findOneAndUpdate
.
const postBid = async (req, res, next) => {
const { auctionKey } = req.body;
const bid = new BidModel(req.body);
bid.save(error => {
if (error) {
res.status(500).json({ message: "Could not post bid." });
}
});
const aucById = await AuctionModel.findOneAndUpdate(
{ _id: auctionKey },
{ $push: { bids: bid } }
).exec((error: any, auction: IAuction) => {
if (error) {
res.status(500).json({ message: "Could not post bid." });
} else {
res.status(201).json({ bid });
}
});
};
По любой причине, если выбрасывает любой из этих двух (save
bid и findOneAndUpdate
) Любая ошибка, которую я хочу, чтобы ничего не было сохранено в базе данных. Я хочу сказать, что либо они должны сохранять и обновлять, либо ничего не следует делать с базой данных.
Я пытался использовать сеанс и транзакцию mon goose, но получил эту ошибку.
MongoError: This MongoDB deployment does not support retryable writes. Please add retryWrites=false to your connection string.
Есть Есть ли способ потренироваться в этом сценарии?