Я создаю трекер, который отслеживает использование приглашений на Discord и который использовал, которые приглашают, когда присоединяется участник. Я храню данные в MongoDB. У меня проблемы с обновлением значения использования, которое я хранил в массиве. Я хочу, чтобы значение увеличивалось на один после использования, чтобы оно было отражено в базе данных. < /P>
Документ ниже < /p>
{
"_id": {
"$numberLong": "1290376241140076606"
},
"log_channels": {
"channel_log": {
"$numberLong": "1343383983291105360"
},
"voice_log": {
"$numberLong": "1345281298788253726"
},
"welcome_log": {
"$numberLong": "1344993348808605727"
},
"guild_log": {
"$numberLong": "1343355706547634290"
},
"invite_log": {
"$numberLong": "1343356487602274325"
},
"join_log": {
"$numberLong": "1343355776890310708"
},
"leave_log": {
"$numberLong": "1343355776890310708"
},
"ban_log": {
"$numberLong": "1343356340201852959"
},
"unban_log": {
"$numberLong": "1343356340201852959"
},
"message_log": {
"$numberLong": "1343383983291105360"
}
},
"voice_activity": {},
"invites": [
{
"UrxbKHJV": [
0,
"1118711272054198322",
"2025-03-01 15:18:55.838000+00:00"
]
},
{
"bVnjb7ser9": [
0,
"1118711272054198322",
"2025-03-01 16:27:03.759000+00:00"
]
},
{
"stTaCBQV": [
0,
"1118711272054198322",
"2025-03-02 05:00:09.580000+00:00"
]
}
]
}
< /code>
Код ниже < /p>
filter = {'_id': guild.id}
invite_pool = await guild.invites()
query = await db.guilds.find_one(filter)
tracked_invites = query['invites']
for invite in invite_pool:
for tracked_invite in tracked_invites:
tracked_code = next(iter(tracked_invite))
tracked_uses = tracked_invite.get(tracked_code)[0]
if tracked_code == invite.code and tracked_uses != invite.uses:
await db.guilds.update_one(filter,{'$inc': {f'invites.$.{tracked_code}.{tracked_uses}': 1 } })
return tracked_invite.get(tracked_code)[1]
< /code>
Pool - это текущие приглашения, хранящиеся с помощью Discord на сервере, а отслеживаемые приглашения являются приглашениями в коллекции. Предполагается, что он сравнивает коды приглашений. Когда он находит совпадение в приглашенных кодах, он проверяет, совпадают ли использование друг друга. Если использование не совпадает, это идентифицирует как приглашение, которое использовалось для присоединения участника. Я хочу увеличить значение использования одним, чтобы отразить правильное значение использования в базе данных. Когда я запускаю код < /p>
await db.guilds.update_one(filter,{'$inc': {f'invites.$.{tracked_code}.{tracked_uses}': 1 } })
Это строка кода, в частности, которая доставляет мне проблемы. Это не увеличение значения в массиве. Таким образом, значение 0, которое является первым элементом в массиве, - это то, что я пытаюсь увеличить на один.
Я создаю трекер, который отслеживает использование приглашений на Discord и который использовал, которые приглашают, когда присоединяется участник. Я храню данные в MongoDB. У меня проблемы с обновлением значения использования, которое я хранил в массиве. Я хочу, чтобы значение увеличивалось на один после использования, чтобы оно было отражено в базе данных. < /P> Документ ниже < /p> [code]{ "_id": { "$numberLong": "1290376241140076606" }, "log_channels": { "channel_log": { "$numberLong": "1343383983291105360" }, "voice_log": { "$numberLong": "1345281298788253726" }, "welcome_log": { "$numberLong": "1344993348808605727" }, "guild_log": { "$numberLong": "1343355706547634290" }, "invite_log": { "$numberLong": "1343356487602274325" }, "join_log": { "$numberLong": "1343355776890310708" }, "leave_log": { "$numberLong": "1343355776890310708" }, "ban_log": { "$numberLong": "1343356340201852959" }, "unban_log": { "$numberLong": "1343356340201852959" }, "message_log": { "$numberLong": "1343383983291105360" } }, "voice_activity": {}, "invites": [ { "UrxbKHJV": [ 0, "1118711272054198322", "2025-03-01 15:18:55.838000+00:00" ] }, { "bVnjb7ser9": [ 0, "1118711272054198322", "2025-03-01 16:27:03.759000+00:00" ] }, { "stTaCBQV": [ 0, "1118711272054198322", "2025-03-02 05:00:09.580000+00:00" ] } ] } < /code> Код ниже < /p> filter = {'_id': guild.id} invite_pool = await guild.invites() query = await db.guilds.find_one(filter) tracked_invites = query['invites']
for invite in invite_pool: for tracked_invite in tracked_invites: tracked_code = next(iter(tracked_invite)) tracked_uses = tracked_invite.get(tracked_code)[0] if tracked_code == invite.code and tracked_uses != invite.uses: await db.guilds.update_one(filter,{'$inc': {f'invites.$.{tracked_code}.{tracked_uses}': 1 } }) return tracked_invite.get(tracked_code)[1] < /code> Pool - это текущие приглашения, хранящиеся с помощью Discord на сервере, а отслеживаемые приглашения являются приглашениями в коллекции. Предполагается, что он сравнивает коды приглашений. Когда он находит совпадение в приглашенных кодах, он проверяет, совпадают ли использование друг друга. Если использование не совпадает, это идентифицирует как приглашение, которое использовалось для присоединения участника. Я хочу увеличить значение использования одним, чтобы отразить правильное значение использования в базе данных. Когда я запускаю код < /p> await db.guilds.update_one(filter,{'$inc': {f'invites.$.{tracked_code}.{tracked_uses}': 1 } })[/code] Это строка кода, в частности, которая доставляет мне проблемы. Это не увеличение значения в массиве. Таким образом, значение 0, которое является первым элементом в массиве, - это то, что я пытаюсь увеличить на один.
Я хотел бы иметь возможность написать промежуточное программное обеспечение, которое может перехватить запросы Pimongo до того, как они будут отправлены в БД и, основываясь на какой -то логике кэширования, пусть они пройдут или возвращают результат....
Я новичок в Pimongo и не могу обернуть голову вокруг логики создания вложенной группы и совпадения. Создайте список логических имен, используемых для моделей.
Вывод, который я хочу создать, или рядом с ним. {
{ Model-1 , {Devices: },
{ Model-2 ,...
Мне нужно искать ObjectId с помощью Python с помощью Pimongo, но я всегда получаю ошибку. import pymongo
from pymongo import MongoClient
from pymongo import ObjectId