I have collection named TradeRequest with the following schema
const TradeRequestSchema = mongoose.Schema({
status: {
type: String,
enum: ["opened", "rejected", "accepted"],
default: "opened"
},
_requester: {
required: true,
type: mongoose.Schema.Types.ObjectId
},
_requestedBook: {
required: true,
type: mongoose.Schema.Types.ObjectId
}
});
My database should have only one open request for a book by any person.
So I added a unique index like so -
TradeRequestSchema.index({_requester: 1, _requestedBook: 1, status: 1}, {unique: true});
Problem is this prevents some data to be entered in the database which should be allowed.
For example it prevents my database to have following documents which is fine for my use case -
{_id: 1, _requester: 12345, _requestedBook: 9871212, status: "opened"}
{_id: 2, _requester: 12345, _requestedBook: 9871212, status: "opened"}
But it also prevents the following which is wrong for my use case.
For example if my database already has following documents -
{_id: 3, _requester: 12345, _requestedBook: 9871212, status: "closed"}
{_id: 4, _requester: 12345, _requestedBook: 9871212, status: "opened"}
I cannot change request with id 4 to closed now which is wrong.
Basically what I want is to have a single opened request for a book but multiple closed requests.
How do I achieve this?
via Yasser Hussain
No comments:
Post a Comment