mongoDB typy danych

0

Witam, dodając do bazy danych mongoDB dokumenty np.

db.osoby.insert({
    name:"Jan Kowalski",
    age:22,
    hobbies:["golf,"IT"],
    active: true
})

Chce opisać typy danych zapisanych w schemacie osoby, jako, że nigdzie tych typów nie ustalam to one są ustawiane automatycznie? I mogę opisac to jako:
name - string
age -int
hobbies-array
active - boolean

automatycznie powstaje:
id - ObejctID
Czy to jest ok ?

0

Jeżeli potrzebujesz te typu to po jakiego grzyba wybrałeś MonogDB które chwali się tym że dobrze pracuje gdy schemat jest słabo zdefiniowany? Użyj postgresa i pozamiatane.

W MonogDB filozofia jest taka że DB przechowuje na dysku BSON (taki binarny JSON), i nigdzie nie zapisuje typów. Generalnie JSON jako format prosty/prostacki definiuje takie typy danych:

  • liczba zawsze typu double
  • napis
  • mapa[string, cokolwiek]
  • tablica[cokolwiek]
  • null
  • true/false

Tak więc masz 5 typów: liczba, string, bool, mapa (obiekt) i tablica.

Widzę goście od MonogDB dodali ostatnio możliwość definiowania schematu: https://docs.mongodb.com/realm/mongodb/document-schemas/#std-label-mongodb-schemas To może być dobry start.

0

Ale ja tej bazy nie tworzę po prostu chce opisać typy danych i nie wiem czy mogę coś takiego robić, ale widzę, że tak tylko ze age ustalam jako double?

0

Napisz dokładnie: 1) co chcesz osiągnąć 2) jaki masz problem który blokuje 1 3) czego już próbowałeś.

MongoDB wspiera nieco więcej danych niż czysty JSON, ale wymaga to odpowiedniego mapowania po stronie driver'a: https://docs.mongodb.com/manual/core/shell-types/
Ja już z MonogDB od 3 lat nie miałem kontaktu, więc się zapomniałem że faktycznie np. Date tam był.

0

Chce zrobic cos takiego : https://zapodaj.net/cd069553c2ea9.png.html
baza jest juz stworzona i chce udokumentować typy danych i tyle to jest cały problem. Wyzej jest to zrobione w mongoose i tam się podaje typy danych wprost, a ja mam zwykłe mongodb gdzie dane sa wstawiane przez insert

0

Najlepiej to było by zbytnio nie wierzyć temu co jest w kodzie tylko wysłać parę zapytań do samej bazy.
W twoim przykładzie (o ile nie masz jakichś custom mapować co automatycznie zapiszą int'a jako int'a ani double to będzie):

name:"Jan Kowalski" - string
age:22 - integer (w bazie będzie double, ale sens jest taki że to int, driver powinien zająć się szczegółami typu mapowania)
hobbies:["golf,"IT"] - tablica stringów
active: true - bool

Rozwiązanie najbardziej koszerne to sprawdzenie czy jest ustawiony schemat a jak nie ma to dodanie (https://docs.mongodb.com/realm/mongodb/enforce-a-document-schema/). Schemat służył by wtedy za dokumentację + chronił programistów przed błędami w kodzie. Wada jest taka że taki schemat trzeba wtedy migrować oraz że dane muszą być w miarę ustrukturalizowane.

PS. Tutaj https://stackoverflow.com/a/2308036 masz jak np. wyciągnąć wszystkie klucze które są w danej kolekcji. Pewnie da się i wyciągnąć ich typy. Można by to oskrytpować w jakimś Node/Pythonie i by Ci wygenerowało opis bazy. Tutaj jest jakaś zajawka: https://stackoverflow.com/a/3209872

0

A MongoDB nie ma schematu information_schema? Tabele columns, tables itp...

1 użytkowników online, w tym zalogowanych: 0, gości: 1