sql >> Databasteknik >  >> NoSQL >> MongoDB

Använd Mongosniff för att förtydliga vad din MongoDB hör och säger

Att skriva en applikation ovanpå ramverket ovanpå drivrutinen ovanpå databasen är lite som ett spel på telefonen:du säger "insert foo", och databasen säger "diskmaskin med lila apor".
Mongosniff låter dig se exakt vad databasen hör och säger.
Den kommer med en binär distribution, så om du har en mongod bör du ha mongosniff .

För att prova detta, kör först mongod-instansen som vanligt:

$ ./mongod

När du kör mongosniff måste du säga åt den att lyssna på loopback-gränssnittet (localhost). Det här gränssnittet kallas vanligtvis "lo", men min Mac kallar det "lo0", så kör ifconfig för att se till att du ger det rätt namn. Kör det nu:

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

Notera "sudo":detta fungerade aldrig för mig från mitt användarkonto, förmodligen på grund av några dumma nätverksbehörigheter.

Kör nu Mongo-skalet och försök infoga något:

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

Om du tittar på mongosniff-utgången ser du:

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 }

Det finns tre förfrågningar, alla för ett eländigt inlägg. Genom att klippa den första begäran kan vi ta reda på:

källa –>>
destinationsplats

Vår klient,
I det här fallet fungerar mongo via port 57856 och skickade ett meddelande till databasen (127.0.0.1:27017).
dB
samling

Den här frågan är för "foo"-samlingen i "test"-databasen.
Bytelängd

Begärans längd är 62 byte. Detta kan vara praktiskt om dina förfrågningar är nära den maximala förfrågningslängden (16 MB).

id:
hexadecimal
identifierare

Detta är begäran-ID i hexadecimal och decimal form (i fall du inte har en dator, så klart). Varje fråga till databasen har en unik identifierare kopplad till sig för skatteändamål.
op :
innehåll .

Detta är det faktiska innehållet i begäran:vi infogar detta dokument. Observera att den infogar ett flyttalvärde på 1,0 även om vi har angett 1 i skalet. Detta beror på att JavaScript bara har en nummertyp, så varje nummer som anges i skalet konverteras till en dubbel.
Nästa begäran i utgången av mongosniff är databaskommandot:det kontrollerar att infogningen lyckades (skalet utför alltid säkra infogningar).

Det senaste meddelandet som hördes är något annorlunda:det går från databas till skal. Detta är databasens svar på kommandot getlasterror. Den visar att endast ett dokument returnerades (svar n:1) och att det inte finns några fler resultat som väntar i databasen (cursorId:0). Om detta var en "riktig" fråga och det fanns ett annat paket med resultat att skicka från databasen, skulle cursorId inte vara noll.

MongoDB på 30 minuter


  1. MongoDB extraherar värden från BasicDBObject (Java)

  2. Flera befolkningar - mongoosejs

  3. Flerfältsfrågor på Redis med Redis Spring

  4. Redis-strängar vs Redis-haschar för att representera JSON:effektivitet?