MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Verwenden Sie Mongosniff, um zu verdeutlichen, was Ihre MongoDB hört und sagt

​​

Das Schreiben einer Anwendung oben auf dem Framework oben auf dem Treiber oben auf der Datenbank ist ein bisschen wie ein Spiel am Telefon:Sie sagen „insert foo“ und die Datenbank sagt „Dishwasher with Purple Monkeys“.
Mit Mongosniff können Sie genau sehen, was die Datenbank hört und sagt.
Es kommt mit einer binären Distribution, wenn Sie also einen Mongod haben, sollten Sie Mongosniff haben.

Um dies zu versuchen, führen Sie zuerst die Mongod-Instanz wie gewohnt aus:

$ ./mongod

Wenn Sie mongosniff ausführen, müssen Sie es anweisen, auf die Loopback-Schnittstelle (localhost) zu hören. Diese Schnittstelle heißt normalerweise „lo“, aber mein Mac nennt sie „lo0“, also führen Sie ifconfig aus, um sicherzustellen, dass Sie ihr den richtigen Namen geben. Führen Sie es jetzt aus:

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

Hinweis „sudo“:Dies hat bei mir von meinem Benutzerkonto aus nie funktioniert, wahrscheinlich wegen einiger dummer Netzwerkberechtigungen.

Führen Sie nun die Mongo-Shell aus und versuchen Sie, etwas einzufügen:

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

Wenn Sie sich die Mongosniff-Ausgabe ansehen, sehen Sie:

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 }

Es gibt drei Anfragen, alle für eine miserable Beilage. Indem wir die erste Anfrage kürzen, können wir Folgendes herausfinden:

Quelle –>>
Bestimmungsort

Unser Kunde,
In diesem Fall arbeitet mongo über Port 57856 und sendet eine Nachricht an die Datenbank (127.0.0.1:27017).
dB
Sammlung

Diese Abfrage ist für die „foo“-Sammlung der „test“-Datenbank.
Bytelänge

Die Anforderungslänge beträgt 62 Bytes. Dies kann praktisch sein, wenn Ihre Anfragen nahe an der maximalen Anfragelänge (16 MB) liegen.

id:
hexadezimal
Kennung

Dies ist die Anforderungs-ID in hexadezimaler und dezimaler Form (falls Sie natürlich keinen Computer haben). Jeder Abfrage an die Datenbank ist für Steuerzwecke eine eindeutige Kennung zugeordnet.
op :
Inhalt .

Dies ist der eigentliche Inhalt der Anfrage:Wir fügen dieses Dokument ein. Beachten Sie, dass es einen Fließkommawert von 1,0 einfügt, obwohl wir 1 in die Shell eingegeben haben. Dies liegt daran, dass JavaScript nur einen Zahlentyp hat, sodass jede in die Shell eingegebene Zahl in ein Double umgewandelt wird.
Die nächste Anfrage in der Ausgabe von mongosniff ist der Datenbankbefehl:Er prüft, ob das Einfügen erfolgreich ist (die Shell führt immer sichere Einfügungen durch).

Die zuletzt gehörte Nachricht ist etwas anders:Sie geht von der Datenbank zur Shell. Dies ist die Datenbankantwort auf den Befehl getlasterror. Es zeigt, dass nur ein Dokument zurückgegeben wurde (Antwort n:1) und dass keine weiteren Ergebnisse in der Datenbank warten (cursorId:0). Wenn dies eine „echte“ Abfrage wäre und ein weiteres Ergebnispaket aus der Datenbank gesendet werden müsste, wäre die Cursor-ID nicht Null.

MongoDB in 30 Minuten