// Команды для исправления рефералов конкретного пользователя // Замените USER_ID на ID пользователя, у которого должны быть рефералы // ============================================ // 1. НАЙТИ ПОЛЬЗОВАТЕЛЯ ПО USERNAME ИЛИ ID // ============================================ // var userId = db.users.findOne({ username: "USERNAME" })._id; // или // var userId = ObjectId("USER_ID"); // ============================================ // 2. НАЙТИ ВСЕХ РЕФЕРАЛОВ ЭТОГО ПОЛЬЗОВАТЕЛЯ // ============================================ // db.users.find({ referredBy: userId }).forEach(function(ref) { // print("Реферал: " + (ref.username || ref._id)); // print(" Засчитан: " + (ref.referralCounted || false)); // print(" Дат входа: " + (ref.loginDates ? ref.loginDates.length : 0)); // if (ref.loginDates && ref.loginDates.length > 0) { // print(" Даты: " + ref.loginDates.map(function(d) { return new Date(d).toLocaleDateString('ru-RU'); }).join(', ')); // } // print("---"); // }); // ============================================ // 3. ЗАСЧИТАТЬ ВСЕХ РЕФЕРАЛОВ КОНКРЕТНОГО ПОЛЬЗОВАТЕЛЯ // (замените USER_ID на ID пользователя) // ============================================ var userId = ObjectId("ЗАМЕНИТЕ_НА_ID_ПОЛЬЗОВАТЕЛЯ"); // Найти пользователя var user = db.users.findOne({ _id: userId }); if (!user) { print("❌ Пользователь не найден!"); } else { print("👤 Пользователь: " + (user.username || user._id)); print(" Текущий счетчик рефералов: " + (user.referralsCount || 0)); print("\n🔍 Поиск рефералов...\n"); var fixed = 0; var needMoreDays = 0; var alreadyCounted = 0; db.users.find({ referredBy: userId }).forEach(function(ref) { print("Реферал: " + (ref.username || ref._id)); // Если уже засчитан, пропускаем if (ref.referralCounted === true) { print(" ✅ Уже засчитан"); alreadyCounted++; print("---\n"); return; } // Получить уникальные даты var uniqueDates = new Set(); if (ref.loginDates && Array.isArray(ref.loginDates)) { ref.loginDates.forEach(function(date) { if (!date) return; var d = new Date(date); d.setHours(0, 0, 0, 0); uniqueDates.add(d.getTime()); }); } print(" Уникальных дат: " + uniqueDates.size); if (uniqueDates.size > 0) { var datesArray = Array.from(uniqueDates).map(function(t) { return new Date(t).toLocaleDateString('ru-RU'); }); print(" Даты: " + datesArray.join(', ')); } // Если есть 2+ уникальные даты, засчитать if (uniqueDates.size >= 2) { var newCount = (user.referralsCount || 0) + 1; // Увеличить счетчик рефералов db.users.updateOne( { _id: userId }, { $set: { referralsCount: newCount } } ); // Пометить реферала как засчитанного db.users.updateOne( { _id: ref._id }, { $set: { referralCounted: true, loginDates: [] } } ); user.referralsCount = newCount; // Обновить локальную переменную print(" ✅ ЗАСЧИТАН! Новый счетчик: " + newCount); fixed++; } else if (uniqueDates.size > 0) { print(" ⏳ Нужно еще " + (2 - uniqueDates.size) + " уникальных дат"); needMoreDays++; } else { print(" 📅 Нет дат входа"); needMoreDays++; } print("---\n"); }); print("\n📊 Итого:"); print(" ✅ Засчитано новых: " + fixed); print(" ✅ Уже были засчитаны: " + alreadyCounted); print(" ⏳ Требуется больше дней: " + needMoreDays); // Обновить счетчик пользователя var finalUser = db.users.findOne({ _id: userId }); print("\n 📈 Финальный счетчик рефералов: " + (finalUser.referralsCount || 0)); }