Определенные значения в поддокументе массива должны быть уникальными

#mongodb #mongoose

Вопрос:

У меня есть две схемы для приложения для аукциона, которое я создаю. Один для самого аукциона, и он включает в себя массив вложенных документов с предложениями.

Вот как выглядит моя схема аукциона:

 const auctionSchema = mongoose.Schema(  {  isActive: {  type: Boolean,  required: true  },  duration: {  type: Date,  required: true  },  description: {  type: String,  default: ''  },  bids: [Bid.schema]  },  {  timestamps: true,  } );  

И это моя схема ставок:

 const bidSchema = mongoose.Schema(  {  bidder: {  type: String,  required: true,  trim: true  },  amount: {  type: Number,  required: true,  index: {  unique: true,  partialFilterExpression: { amount: { $type: "number" } }  }  }  },  {  timestamps: true,  } );  

Моя цель состоит в том, чтобы определенная сумма ставки могла существовать в этом массиве только один раз. Но значение участника торгов может быть дубликатом.

Вот как я пишу в аукционном документе:

 var query = { 'tokenId': tokenId },  update = { $push: { bids: bidBody } };   Auction.findOneAndUpdate(query, update, function (err, data) {  if (err) {  console.log(err);  }  });  

Но, к сожалению, я могу создавать дубликаты без проблем.

Комментарии:

1. таким образом, вопрос в том, чтобы разрешить дубликаты только в том случае, если дубликат имеет максимальное значение из существующих? например, если 1 3 5 мы не можем добавить 1, но можем добавить 5? или мы не можем добавить ни одного из 1,3,5 ? ответ ниже,если вы хотите, чтобы все участники торгов были уникальными и никогда не допускали дублирования.

2. Таким образом, в принципе, если есть заявка с участником торгов «боб» и сумма равна 10, не может быть другого участника торгов «Сьюзен» с суммой 10. Это должно быть запрещено. Но «боб» или «Сьюзен» могут сделать ставку в другой раз с более высокой ставкой, чем 10.