Написването на приложение върху рамката върху драйвера върху базата данни е малко като игра по телефона:казвате „вмъкнете foo“, а в базата данни пише „съдомиялна машина с лилави маймуни“.
Mongosniff ви позволява да видите какво точно чува и казва базата данни.
Той идва с двоична дистрибуция, така че ако имате mongod, трябва да имате mongosniff .
За да опитате това, първо стартирайте екземпляра на mongod както обикновено:
$ ./mongod
Когато стартирате mongosniff, трябва да му кажете да слуша loopback интерфейса (localhost). Този интерфейс обикновено се нарича "lo", но моят Mac го нарича "lo0", така че стартирайте ifconfig, за да сте сигурни, че сте му дали правилното име. Сега го стартирайте:
$ sudo ./mongosniff --source NET lo
sniffing... 27017
Забележка „sudo“:това никога не ми е работило от моя потребителски акаунт, вероятно поради някакви глупави мрежови разрешения.
Сега стартирайте обвивката на Mongo и опитайте да вмъкнете нещо:
db.foo.insert({x:1})
Ако погледнете изхода на mongosniff, ще видите:
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 }
Има три искания, всички за една мизерна вложка. Изрязвайки първата заявка, можем да разберем:
източник –>>
място на дестинация
Наш клиент,
В този случай mongo работи през порт 57856 и изпраща съобщение до базата данни (127.0.0.1:27017).
dB
колекция
Тази заявка е за колекцията „foo“ на базата данни „test“.
Дължина на байт
Дължината на заявката е 62 байта. Това може да е удобно, ако вашите заявки са близо до максималната дължина на заявката (16 MB).
идентификатор:
шестнадесетичен
идентификатор
Това е идентификационният номер на заявката в шестнадесетична и десетична форма (в случай, че нямате компютър, очевидно). Всяка заявка към базата данни има уникален идентификатор, свързан с нея за данъчни цели.
оп :
съдържание.
Това е действителното съдържание на искането:вмъкваме този документ. Обърнете внимание, че вмъква стойност с плаваща запетая от 1.0, въпреки че сме въвели 1 в обвивката. Това е така, защото JavaScript има само един тип число, така че всяко число, въведено в обвивката, се преобразува в двойно.
Следващата заявка в изхода на mongosniff е командата на базата данни:тя проверява дали вмъкването е успешно (обвивката винаги изпълнява безопасни вмъквания).
Последното чуто съобщение е малко по-различно:преминава от база данни към обвивка. Това е отговорът на базата данни на командата getlasterror. Показва, че е върнат само един документ (отговор n:1) и че няма повече чакащи резултати в базата данни (cursorId:0). Ако това беше „реална“ заявка и имаше друг пакет резултати за изпращане от базата данни, cursorId би бил различен от нула.