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

Brug Mongosniff til at afklare, hvad din MongoDB hører og siger

At skrive en applikation oven på rammen oven på driveren oven på databasen er lidt ligesom et spil på telefonen:du siger "indsæt foo", og databasen siger "opvaskemaskine med lilla aber".
Mongosniff giver dig mulighed for at se præcis, hvad databasen hører og siger.
Det kommer med en binær distribution, så hvis du har en mongod, bør du have mongosniff .

For at prøve dette skal du først køre mongod-forekomsten som normalt:

$ ./mongod

Når du kører mongosniff, skal du bede den om at lytte til loopback-grænsefladen (localhost). Denne grænseflade kaldes normalt "lo", men min Mac kalder den "lo0", så kør ifconfig for at sikre, at du giver den det rigtige navn. Kør det nu:

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

Bemærk "sudo":dette virkede aldrig for mig fra min brugerkonto, sandsynligvis på grund af nogle dumme netværkstilladelser.

Kør nu Mongo-skallen og prøv at indsætte noget:

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

Hvis du ser på mongosniff-outputtet, vil du se:

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 }

Der er tre anmodninger, alle for et elendigt indlæg. Ved at klippe den første anmodning kan vi finde ud af:

kilde –>>
destinationssted

Vores klient,
I dette tilfælde arbejder mongo via port 57856 og sendte en besked til databasen (127.0.0.1:27017).
dB
samling

Denne forespørgsel er til "foo"-samlingen af ​​"test"-databasen.
Bytelængde

Anmodningslængden er 62 bytes. Dette kan være praktisk, hvis dine anmodninger er tæt på den maksimale anmodningslængde (16 MB).

id:
hexadecimal
identifikator

Dette er anmodnings-id'et i hexadecimal og decimal form (i tilfælde af at du ikke har en computer, naturligvis). Hver forespørgsel til databasen har en unik identifikator knyttet til sig til skattemæssige formål.
op :
indhold .

Dette er det faktiske indhold af anmodningen:vi indsætter dette dokument. Bemærk, at den indsætter en flydende kommaværdi på 1,0, selvom vi har indtastet 1 i skallen. Dette skyldes, at JavaScript kun har én taltype, så hvert tal, der indtastes i skallen, konverteres til en dobbelt.
Den næste anmodning i outputtet af mongosniff er databasekommandoen:den kontrollerer, at indsættelsen er vellykket (skallen udfører altid sikre indsættelser).

Den sidst hørte besked er lidt anderledes:den går fra database til shell. Dette er databasens svar på kommandoen getlasterror. Det viser, at der kun blev returneret ét dokument (svar n:1), og at der ikke er flere resultater, der venter i databasen (cursorId:0). Hvis dette var en "rigtig" forespørgsel, og der var en anden pakke med resultater at sende fra databasen, ville cursorId være ikke-nul.

MongoDB på 30 minutter


  1. MongoDB indlejret gruppe?

  2. Skriver du en forespørgsel for at tilføje flere værdier til en nøgle i REDIS-hashes?

  3. MongoDB $toLong

  4. Timeout udfører SET {Key}, inst:0, mgr:Inaktiv, kø:2, qu=1, qs=1, qc=0, wr=1/1, in=0/0