• 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

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
+2 głosów
206 wizyt
pytanie zadane 17 marca w SQL, bazy danych przez Piotrek2713 Mądrala (5,500 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 (256,320 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,500 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 (256,320 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,500 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 (214,530 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 237 wizyt
0 głosów
0 odpowiedzi 108 wizyt
0 głosów
0 odpowiedzi 203 wizyt
pytanie zadane 25 października 2018 w JavaScript przez kaczor32 Nowicjusz (120 p.)

93,187 zapytań

142,201 odpowiedzi

322,012 komentarzy

62,514 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2365p. - dia-Chann
  2. 2326p. - Łukasz Piwowar
  3. 2315p. - Łukasz Eckert
  4. 2269p. - Tomasz Bielak
  5. 2235p. - Łukasz Siedlecki
  6. 2006p. - Michal Drewniak
  7. 2006p. - rucin93
  8. 1964p. - CC PL
  9. 1946p. - Adrian Wieprzkowicz
  10. 1901p. - Mikbac
  11. 1744p. - rafalszastok
  12. 1734p. - Anonim 3619784
  13. 1586p. - Dawid128
  14. 1520p. - Marcin Putra
  15. 1480p. - ssynowiec
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...