-
Notifications
You must be signed in to change notification settings - Fork 3
mongodb
ghdrako edited this page Feb 25, 2024
·
27 revisions
- https://www.mongodb.com/try/download/community
- https://www.mongodb.com/try/download/shell Start serwer
mdir \data\db
mongod.exe --dbpath d:\test\mongodb\data
Connect client
mongosh
Dodanie do kolekcji me dokument address : {street : "Marszałkowska", city : "Warszawa"}
:
db.me.insertOne(
{
name : "Rafał",
age : 35,
address : {street : "Chłodna", city : "Warszawa"}
})
db.users.deleteOne({_id : 1})
db.users.deleteMany({name : "Ann"})
db.Users.deleteMany({})
db.Users.drop()
db.Users.countDocuments()
- pobieranie "wszystkie" dokumenty - stremming danych - założony zostanie kursor i domyślnie dostaniemy 20 dokumentów iterująca sterownik będzie wysylal getMore(). Kazdy sterownik zapewnia mechanizm streemingu danych. Kursor nie jest izolowany - jesli dojda dokumenty to pojawiasie w kursorze. Klient mongodb opiera sie na sterowniku node.js. Find domyslnie streemuje dane za pomoca kursora. Jesli nieaktywnosc to kursor jest zamykany domyslnie po 10 minutach
db.me.find({}) # SELECT * FROM me;
{ <field1>: <value1>, ... }
db.me.find({"age" : 30}) # select * from me where age = 30;
db.<colection>.find(<where>,<projection>)
db.me.find({},{name : 1}) # domyślnie dorzuca tez id select _id,name from me
db.me.find({},{name : 1, _id : 0}) # wymuszamy by nie zwrócił id select name from me
db.me.find({}, {name : 0}) # wszystkie pola oprocz name
db.me.find({"name" : "Artur"}).sort("age") # sortowanie select * from me order by age;
db.me.find({"name" : "Artur"}).skip(10)
db.me.find({"name" : "Artur"}).limit(10) # select * from me limit 10
db.me.find({"filed" : {$exist : 1}})
db.me.find({"filed" : {$exist : 0}})
db.products.find({},($elemMatch : {"warehouses : {qty : {$lt : 10}}}})
Zmiana nazwy pola
db.me.updateMany({},{$unset : { "name" : "imie"}}) # zmiana nazwy - obsługa polskich znaków
db.me.updateMany({},{$unset : { "age" : ""}}) # usuniecie pola
- wzorowana na operatorze
|
w linux - pipeline - definiujemy pipeline przez który przejdą nasze dane (kolekcja)
kolekcja ---> filtr ---> projekcja ---> grupowania ---> filtrowania ---> out ---> kolekcja 2
Każdy z etapów może występować dowolna ilość razy - tutaj np. 2 razy filtrowanie
db.
.agregate i dalej kroki- operator $match - taki sam jak find
{ $match : {query}}
db.movies.aggregate(
[ {$match : {directed_by: "George Lucas"}}]
)
to samo co
db.movies.find({directed_by: "George Lucas"})
- operator $sort
db.movies.aggregate(
[ {$match : {directed_by: "George Lucas"}},
{$sort : {vote_average : -1}} // sortowanie malejaco -1
]
)
-
operator $limit
-
Operator $project
db.movies.aggregate(
[ {$match : {directed_by: "George Lucas"}},
{$sort : {vote_average : -1}},
{$project : {title : 1}}
]
)
- Tworzenie nowego pola zysk jako roznica
db.movies.aggregate(
[ {$match : {directed_by: "George Lucas"}},
{$sort : {vote_average : -1}},
{$project : {zysk : {$subtract : ["$revenue.Amount" , "$budget.Amount"]}}}
]
)
-
operator $addFields - dodanie pola do dokumentu
-
$arrayElemAt ; {, index] - zwraca wybrany element tablicy
- https://www.mongodb.com/try/download/database-tools
- https://github.com/rkaszczuk/MongoCourse/raw/master/0_Movies_Data/moviesBackup.zip
mongoimport --db test --collection movies --jsonArray --drop movies.json
./mongoimport --db test --collection movies --jsonArray --drop movies.json
-
--jsonArray
- to nie sa pojedyncze jsony tylko tablica jsonow -
--drop
- kolekcja przed zaimportowaniem bedzie dropowana
Inne mongostat - statystyki
- noSqlBooster - darmowe z ograniczeniami - najprostrzy w instalacji
- Robo3T -- nie rozwijany opensource darmowy (wykupilo Studio3T i zamknelo)
- Studio3T - darmowe z ograniczeniami
- Compass - darmowy ale ubogi
- Vs Code + plugin MongoDB
Test