Comandi base Mongodb

Subito dopo l’installazione, MongoDB non ha utenti preimpostati ma un meccanismo detto Localhost Exception che permette di accedere come amministratore a tutti gli utenti che tentano di accedere dalla stessa macchina in cui si trova il server.

Come primo step creare un utente amministratore degli utenti di tutti i database presenti in MongoDB.
I ruoli userAdminAnyDatabase e readWriteAnyDatabase permettono di creare ed eliminare utenti, ruoli e cambiare password, e può essere fatto su ogni database presente nell’istanza.

roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]


Creiamo un utente amministratore.
> use admin
switched to db dbtest01
> db.createUser(
   {
     user: "uadm01",
    pwd: "uadm01",
  roles: [{role: "root" , db:"admin"}]
  }
 )
Il ruolo root ha accesso alle operazioni e a tutte le risorse: readWriteAnyDatabase, dbAdminAnyDatabase, userAdminAnyDatabase, clusterAdmin, restore e backup.

Autenticarsi come admin al db dbtest01
> mongo -u admin01 -p admin01 admin

oppure

#mongo
> use admin
switched to db admin
> db.auth("uadm01","uadm01")
1

Per vedere la lista  degli utenti, eseguire il comando
> show users
oppure
> db.getUsers()

Per cancellare un utente eseguire il comando
> db.dropUser("alfo")
true

Per cambiare la pwd
db.changeUserPassword("heroadmin","heroadmin")



                                                                      Creare un database                                                           

Accedere con utenza amministratore e creare un utenza amministratore del db da creare.

# mongo -u admin -p admin admin
> use heroesdb
> db.createUser(
{ user: "heroadmin",
  pwd: "heroadmin",
  roles: [{role: "dbOwner" , db:"heroesdb"}]
})

Test di connessione da localhost:

# mongosh --host localhost --port 27017 --username heroadmin --password heroadmin 
--authenticationDatabase heroesdb

Uscire dalla shell mongo e autenticarsi come nuovo user e creare il db.
 mongo -u heroadmin -p heroadmin heroesdb
> db
heroesdb
Creare una collection.
> db.heroes.insert( {hero:"Punisher", name:"Frank", surname:"Castle", groups:" "} )
WriteResult({ "nInserted" : 1 })

La insert crea sia il database heroesdb che la collection  heroes.

Per visualizzare le collection
> show collections
heroes

Per visualizzare il contenuto di una collection
> db.heroes.find()
{ "_id" : ObjectId("5d10e552d2334baaa925d7f2"), "hero" : "Daredevil", "name" : "Matthew", "surname" : "Murdock", "groups" : "Defenders" }

Per inserire documenti multipli
> db.heroes.insert([
{hero:"Ironman", name:"Tony", surname:"Stark", groups:"Avengers"} ,
{hero:"Wolverine", name:"James", surname:"Howlett", groups:["Avengers","X-men"]},
])

Per cancellare una collection
> db.heroes.drop()

Interrogare una collection:
> db.heroes.find({ "_id" : ObjectId("5d1ddbaed879aee31e5407c3")})
{ "_id" : ObjectId("5d1ddbaed879aee31e5407c3"), "hero" : "Ironman", "name" : "Tony", "surname" : "Stark", "groups" : "Avengers" }

> db.heroes.find({"surname": "Howlett"})
{ "_id" : ObjectId("5d1ddbaed879aee31e5407c4"), "hero" : "Wolverine", "name" : "James", "surname" : "Howlett", "groups" : [ "Avengers", "X-men" ] }

> db.heroes.find({"groups" : "Avengers"})
{ "_id" : ObjectId("5d1ddbaed879aee31e5407c3"), "hero" : "Ironman", "name" : "Tony", "surname" : "Stark", "groups" : "Avengers" }
{ "_id" : ObjectId("5d1ddbaed879aee31e5407c4"), "hero" : "Wolverine", "name" : "James", "surname" : "Howlett", "groups" : [ "Avengers", "X-men" ] }


Per droppare un database
#mongo -u "heroadmin"  -p "heroadmin" heroesdb
> show dbs
heroesdb  0.000GB
> db.dropDatabase()
{ "dropped" : "heroesdb", "ok" : 1 }
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB

Il drop del db non cancella gli utenti ad esso associati.


                                                                           GridFS                                                                           

GridFS è una specifica che permette di memorizzare e richiamare file che superano la dimensione di 16MB dei documenti BSON.
Quindi invece di memorizzare un file in un solo documento, divide un file in singoli pezzi della dimenzione di 255KB (tranne l'ultimo pezzo) e li memorizza in singoli documenti.
Il vantaggio dell'utilizzo di GridFS è che è possibile accedere a solo una parte del file di interesse (esempio viedo, audio) senza doverlo caricare tutto in memoria.

Creiamo il file del dizionario

cat /usr/share/dict/linux.words >  /tmp/dictionary

# mongofiles -u heroadmin -p heroadmin -d heroesdb list
2019-07-05T16:30:11.907+0200    connected to: localhost

Importiamo il fine nel database creato prima.
# mongofiles -u heroadmin -p heroadmin -d heroesdb put /tmp/dictionary
2019-07-05T16:30:30.180+0200    connected to: localhost
2019-07-05T16:30:30.334+0200    added file: /tmp/dictionary


Visualizziamo i file memorizzati nel db e la loro dimensione.
# mongofiles -u heroadmin -p heroadmin -d heroesdb list
2019-07-05T16:30:35.352+0200    connected to: localhost
/tmp/dictionary 4953699



Interroghiamo il file presente nel database.
# mongo -u heroadmin -p heroadmin heroesdb
MongoDB shell version v4.0.10
connecting to: mongodb://127.0.0.1:27017/heroesdb?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("cd1308f0-7bff-47cf-a063-40db646a9776") }
MongoDB server version: 4.0.10
> db
heroesdb
> db.fs.files.find()
{ "_id" : ObjectId("5d2436717cdd491269f2ec7d"), "chunkSize" : 261120, "uploadDate" : ISODate("2019-07-09T06:38:42.499Z"), "length" : 4953699, "md5" : "40c0825855792bd20e8a2d515fe9c3e3", "filename" : "/tmp/dictionary" }
>

GridFS memorizza i files in due collection:
chunks - memorizza pezzi di binari
 - files - memorizza i metadati del file

Ricerchiamo un file.
Creare un file e  importiamolo nel db.
#cp /tmp/dictionary /tmp/vacaboli
# mongofiles -u heroadmin -p heroadmin -d heroesdb put /tmp/vacaboli
# mongofiles -u heroadmin -p heroadmin -d heroesdb list
2019-07-09T10:48:27.509+0200    connected to: localhost
/tmp/dictionary 4953699
/tmp/vacaboli   4953699
# mongofiles -u heroadmin -p heroadmin -d heroesdb search vacaboli
2019-07-09T10:56:07.275+0200    connected to: localhost
/tmp/vacaboli   4953699
# mongofiles -u heroadmin -p heroadmin -d heroesdb search dict
2019-07-09T10:56:12.660+0200    connected to: localhost
/tmp/dictionary 4953699

Cancellare un file
# mongofiles -u heroadmin -p heroadmin -d heroesdb delete  /tmp/vacaboli
2019-07-09T10:57:23.382+0200    connected to: localhost
2019-07-09T10:57:23.458+0200    successfully deleted all instances of '/tmp/vacaboli' from GridFS

# mongofiles -u heroadmin -p heroadmin -d heroesdb list
2019-07-09T10:57:35.424+0200    connected to: localhost
/tmp/dictionary 4953699















Post popolari in questo blog

Create e Drop Pluggable Database

ORA-12154: TNS: il listener non è attualmente a conoscenza del servizio richiesto nel descrittore di connessione