#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. Самым простым способом, вероятно, было бы изменить схему таким образом, чтобы объекты-участники находились в массиве, а затем использовать фильтры массива.