MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Usa Mongosniff per chiarire cosa sente e dice il tuo MongoDB

Scrivere un'applicazione sopra il framework sopra il driver sopra il database è un po' come un gioco al telefono:dici "inserisci foo" e il database dice "lavastoviglie con scimmie viola".
Mongosniff ti consente di vedere esattamente ciò che il database sente e dice.
Viene fornito con una distribuzione binaria, quindi se hai un mongod, dovresti avere mongosniff .

Per provare questo, per prima cosa, esegui l'istanza mongod come al solito:

$ ./mongod

Quando esegui mongosniff devi dirgli di ascoltare l'interfaccia di loopback (localhost). Questa interfaccia è solitamente chiamata "lo", ma il mio Mac la chiama "lo0", quindi esegui ifconfig per assicurarti di dargli il nome giusto. Ora eseguilo:

$ sudo ./mongosniff --source NET lo
sniffing... 27017

Nota "sudo":questo non ha mai funzionato per me dal mio account utente, probabilmente a causa di alcuni stupidi permessi di rete.

Ora esegui la shell Mongo e prova a inserire qualcosa:

db.foo.insert({x:1})

Se guardi l'output di mongosniff, vedrai:

127.0.0.1:57856 -->> 127.0.0.1:27017 test.foo 62 bytes id:430131ca 1124151754
insert: { _id: ObjectId('4c7fb007b5d697849addc650'), x: 1.0 }
127.0.0.1:57856 -->> 127.0.0.1:27017 test.$cmd 76 bytes id:430131cb 1124151755
query: { getlasterror: 1.0, w: 1.0 } ntoreturn: -1 ntoskip: 0
127.0.0.1:27017 <<-- 127.0.0.1:57856 76 bytes id:474447bf 1195657151 - 1124151755
reply n:1 cursorId: 0
{ err: null, n: 0, wtime: 0, ok: 1.0 }

Ci sono tre richieste, tutte per un misero inserto. Tagliando la prima richiesta, possiamo scoprire:

fonte –>>
luogo di destinazione

Il nostro cliente,
In questo caso, mongo , funziona tramite la porta 57856 e ha inviato un messaggio al database (127.0.0.1:27017).
dB
raccolta

Questa query è per la raccolta "foo" del database "test".
Lunghezza in byte

La lunghezza della richiesta è di 62 byte. Questo può essere utile se le tue richieste sono vicine alla lunghezza massima della richiesta (16 MB).

id:
esadecimale
identificatore

Questo è l'ID della richiesta in forma esadecimale e decimale (nel caso tu non abbia un computer, ovviamente). Ogni query al database ha un identificatore univoco associato a fini fiscali.
op :
contenuti .

Questo è il contenuto effettivo della richiesta:inseriamo questo documento. Nota che inserisce un valore in virgola mobile di 1,0 anche se abbiamo inserito 1 nella shell. Questo perché JavaScript ha un solo tipo di numero, quindi ogni numero inserito nella shell viene convertito in un double.
La richiesta successiva nell'output di mongosniff è il comando del database:controlla che l'inserimento sia riuscito (la shell esegue sempre inserimenti sicuri).

L'ultimo messaggio ascoltato è leggermente diverso:va dal database alla shell. Questa è la risposta del database al comando getlasterror. Mostra che è stato restituito un solo documento (risposta n:1) e che non ci sono più risultati in attesa nel database (cursorId:0). Se questa fosse una query "reale" e ci fosse un altro pacchetto di risultati da inviare dal database, cursorId sarebbe diverso da zero.

MongoDB in 30 minuti