как обновить свойство объекта в соответствии с фильтром в MongoDB

#mongodb #mongoose

Вопрос:

У него есть коллекция ниже, и он хотел установить свойство battlesWon равным 1 в соответствии с адресом, переданным в фильтре, это можно сделать с помощью MongoDB, если адрес фильтра совпадает с адресом первого участника, я хочу обновить battlesWon до 1, или если адрес второго участника соответствует фильтру, я хочу обновить battlesWon до 1

 [{
  "status": "PENDING",
  "secondParticipant": {
    "address": "0x3ba59bcc1a02cb46e7de35fb0bacc860bf072244",
    "name": "Adriana",
    "battlesWon": 0
  },
  "firstParticipant": {
    "address": "0x3ba59bcc1a02cb46e7de35fb0bacc860bf075661",
    "name": "Cristiano",
    "battlesWon": 0
  },
  "arena": "Tacoma Dome",
  "duelId": "bb2e371f-3ffb-4403-b4da-c4ea21d10645",
  "tournamentId": "614344f6a1ec1c056430e771",
  "id": "6f99c90a-0d41-44ed-b8fe-1a358889ebbf",
}]
 

Ожидаемый:

 [{
  "status": "PENDING",
  "secondParticipant": {
    "address": "0x3ba59bcc1a02cb46e7de35fb0bacc860bf072244",
    "name": "Adriana",
    "battlesWon": 1
  },
  "firstParticipant": {
    "address": "0x3ba59bcc1a02cb46e7de35fb0bacc860bf075661",
    "name": "Cristiano",
    "battlesWon": 0
  },
  "arena": "Tacoma Dome",
  "duelId": "bb2e371f-3ffb-4403-b4da-c4ea21d10645",
  "tournamentId": "614344f6a1ec1c056430e771",
  "id": "6f99c90a-0d41-44ed-b8fe-1a358889ebbf",
}]
 

Запрос:

  db.matches.updateOne({id: "6f99c90a-0d41-44ed-b8fe-1a358889ebbf", secondParticipant.address: "0x3ba59bcc1a02cb46e7de35fb0bacc860bf072244", firstParticipant.address: "0x3ba59bcc1a02cb46e7de35fb0bacc860bf072244"}, {$set: {"??.battlesWon": 1}})
 

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

1. Самым простым способом, вероятно, было бы изменить схему таким образом, чтобы объекты-участники находились в массиве, а затем использовать фильтры массива.