MongoDB è uno dei più famosi e, permettetemi, gettonati engine NoSQL ad oggi presente nel panorama. La sua diffusione si deve anche alla facilità di installazione e gestione sui vari sistemi. In qualsiasi modo abbiate installato MongoDB, con brew o direttamente compilando i sorgenti, spesso ci troviamo ad un problema relativo alla directory dove MongoDB conserva i documents. All’esecuzione del comando mongod  che avvia l’engine, potremmo trovarci un errore simile:

$ mongod
2017-07-13T10:52:50.049+0200 I CONTROL  [initandlisten] MongoDB starting : pid=7675 port=27017 dbpath=/data/db 64-bit host=iMac-di-Luca.lan
2017-07-13T10:52:50.050+0200 I CONTROL  [initandlisten] db version v3.4.6
2017-07-13T10:52:50.050+0200 I CONTROL  [initandlisten] git version: c55eb86ef46ee7aede3b1e2a5d184a7df4bfb5b5
2017-07-13T10:52:50.050+0200 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.2l  25 May 2017
2017-07-13T10:52:50.050+0200 I CONTROL  [initandlisten] allocator: system
2017-07-13T10:52:50.050+0200 I CONTROL  [initandlisten] modules: none
2017-07-13T10:52:50.050+0200 I CONTROL  [initandlisten] build environment:
2017-07-13T10:52:50.050+0200 I CONTROL  [initandlisten]     distarch: x86_64
2017-07-13T10:52:50.050+0200 I CONTROL  [initandlisten]     target_arch: x86_64
2017-07-13T10:52:50.050+0200 I CONTROL  [initandlisten] options: {}
2017-07-13T10:52:50.077+0200 I STORAGE  [initandlisten] exception in initAndListen: 29 Data directory /data/db not found., terminating
2017-07-13T10:52:50.077+0200 I NETWORK  [initandlisten] shutdown: going to close listening sockets...
2017-07-13T10:52:50.077+0200 I NETWORK  [initandlisten] shutdown: going to flush diaglog...
2017-07-13T10:52:50.077+0200 I CONTROL  [initandlisten] now exiting
2017-07-13T10:52:50.077+0200 I CONTROL  [initandlisten] shutting down with code:100

Il sistema, in due parole, ci sta dicendo che la directory /data/db non esiste. Di default, MongoDB conserva qui i dati e per questo dobbiamo crearla. Vediamo come:

$ sudo mkdir -p /data/db

Attenzione a due cose, primo, lanciarla con i permessi di root (usando sudo ) e, secondo, far cominciare il percorso con /, quindi alla radice del nostro sistema.

Gestire i permessi di /data/db

A questo punto, rilanciando il comando mongod , potremmo trovarci difronte ad un nuovo problema: i permessi della cartella /data/db:

I STORAGE  [initandlisten] exception in initAndListen: 20 Attempted to create a lock file on a read-only directory: /data/db, terminating

Quello che dobbiamo fare è accertarci che l’utente di sistema abbia i permessi di lettura e scrittura sulla directory. Per farlo, possiamo lanciare questi comando:

$ whoami
lucamurante

Per prima cosa, controlliamo quale utente è attualmente in uso In questo caso, lucamurante. Successivamente lo assegniamo come proprietario della directory /data/db.

$ sudo chown lucamurante /data/db

Fatto. A questo punto, lanciamo nuovamente il comando mongod , che dovrebbe partire senza problemi.