• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Ustalenie limitu posiadanych firm w grze na disorda mongoose

Object Storage Arubacloud
+2 głosów
126 wizyt
pytanie zadane 17 marca w SQL, bazy danych przez Piotrek2713 Mądrala (5,380 p.)

Tworzę bota na discorda w postaci gry. Gracze na serwerze mogą posiadać własne firmy i tutaj pojawia się pewien problem. Osoba, która mi zleciła wykonanie bota chce aby jeden gracz mógł mieć nie więcej niż 3 firmyPróbowałem to zrobić w podobny sposób

posessedCompanies: {
type: [String],
maxlength: 3
}

ale maxlength nic nie zmieniło

zajrzałem na to forum i robiłem podobnie kilka razy, ale też to nic nie zmieniło

teraz mam tak

posessedCompanies: {
        type: [String],
        ref: 'Company',
    },
    posessedCompaniesAmount: {
        type: Number,
        default: 0,
        max: 3
    },

oraz linijkę

await Gamer.findOneAndUpdate({userName: nick}, { $push: { posessedCompanies: companyname } }, { $inc: { posessedCompaniesAmount: 1 } });

ale wartość się nie inkrementuje

W jaki sposób mogę ustalić limit posiadanych firm dla każdego gracza?

2 odpowiedzi

+1 głos
odpowiedź 18 marca przez VBService Ekspert (253,340 p.)

Próbowałeś coś w tym stylu

const gamer = await Gamer.findOne({ userName }).populate('posessedCompanies');
if (gamer.posessedCompanies.length >= 3) {
  throw new Error('Gracz już posiada maksymalną liczbę firm.');
}
async function addCompanyToGamer(userName, companyId) {
    try {
        // Sprawdzamy, czy gracz już nie posiada maksymalnej liczby firm
        const gamer = await Gamer.findOne({ userName }).populate('posessedCompanies');
        if (gamer.posessedCompanies.length >= 3) {
            throw new Error('Gracz już posiada maksymalną liczbę firm.');
        }

        // Dodajemy firmę do listy posiadanych przez gracza
        await Gamer.findOneAndUpdate(
            { userName },
            { $push: { posessedCompanies: companyId } }
        );

        console.log('Firma została dodana do gracza.');
    } catch (error) {
        console.error('Błąd podczas dodawania firmy do gracza:', error.message);
    }
}

 

komentarz 18 marca przez Piotrek2713 Mądrala (5,380 p.)

Z tym poradziłem sobie w inny sposób, ale przyda mi się to do odczytania liczby pracowników we firmie oraz jej wielkości (limitu pracowników).

Niestety funkcja

const hire = async (message, nick, companyname) => {
    const company = await Company.findOne({ companyName: companyname }).populate('workers');
    if (company.workers.length < 5) {
        Gamer.findOne({userName: nick}, { $push: { worksAt: companyname} } );
        Company.findOneAndUpdate({companyName: companyname}, {$push: {workers: nick}});
        company.$inc('workersAmount', 1);
        await company.save();
        message.channel.send(`${nick}, zostałeś zatrudniony w firmie ${companyname}`);
    }
    else {
    message.channel.send(`Nie udało się zatrudnić Cię w firmie ${companyname}`);
    }
}

Nie działa. Konsola wyświetla błąd

TypeError: Cannot read properties of null (reading 'workers')

czego nie rozumiem, ponieważ tablica workers ma jeden element

komentarz 18 marca przez VBService Ekspert (253,340 p.)

Sprawdzałeś co zawiera company, np. tak

const company = await Company.findOne({ companyName: companyname }).populate('workers');
console.log(company);

lub Wstrzymywanie kodu z punktami przerwania

Pierwsze kroki z debugowaniem JavaScriptu w Narzędziach deweloperskich w Chrome.

komentarz 18 marca przez Piotrek2713 Mądrala (5,380 p.)

Sprawdzałeś co zawiera company, np. tak

konsola zwraca null

PS. programuję w nodejs

0 głosów
odpowiedź 18 marca przez Ehlert Ekspert (212,670 p.)
W jakich sytuacjach modyfikujesz rozmiar tego array'a? Ile obiektów modyfikowanych jest per request? Ja bym zrobił to sprawdzenie po stronie aplikacji.

Podobne pytania

0 głosów
0 odpowiedzi 68 wizyt
0 głosów
0 odpowiedzi 50 wizyt
0 głosów
0 odpowiedzi 178 wizyt
pytanie zadane 25 października 2018 w JavaScript przez kaczor32 Nowicjusz (120 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...