• 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
204 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,176 zapytań

142,186 odpowiedzi

321,980 komentarzy

62,507 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 1637p. - dia-Chann
  2. 1614p. - Łukasz Piwowar
  3. 1599p. - CC PL
  4. 1597p. - Łukasz Eckert
  5. 1572p. - Tomasz Bielak
  6. 1537p. - Łukasz Siedlecki
  7. 1531p. - rucin93
  8. 1509p. - rafalszastok
  9. 1356p. - ssynowiec
  10. 1341p. - Mikbac
  11. 1328p. - Michal Drewniak
  12. 1273p. - Adrian Wieprzkowicz
  13. 1169p. - Grzegorz Aleksander Klementowski
  14. 1155p. - Piotr Aleksandrowicz
  15. 1149p. - Michał Telesz
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!

...