Menulis aplikasi di atas kerangka kerja di atas driver di atas database agak mirip dengan permainan di telepon:Anda mengatakan "masukkan foo", dan database mengatakan "pencuci piring dengan monyet ungu".
Mongosniff memungkinkan Anda untuk melihat dengan tepat apa yang didengar dan dikatakan database.
Muncul dengan distribusi biner, jadi jika Anda memiliki mongod, Anda harus memiliki mongosniff .
Untuk mencobanya, pertama, jalankan instance mongod seperti biasa:
$ ./mongod
Ketika Anda menjalankan mongosniff Anda harus memberitahunya untuk mendengarkan antarmuka loopback (localhost). Antarmuka ini biasanya disebut "lo", tetapi Mac saya menyebutnya "lo0", jadi jalankan ifconfig untuk memastikan Anda memberikan nama yang benar. Sekarang jalankan:
$ sudo ./mongosniff --source NET lo
sniffing... 27017
Catatan "sudo":ini tidak pernah berhasil untuk saya dari akun pengguna saya, mungkin karena beberapa izin jaringan yang bodoh.
Sekarang jalankan shell Mongo dan coba masukkan sesuatu:
db.foo.insert({x:1})
Jika Anda melihat output mongosniff, Anda akan melihat:
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 }
Ada tiga permintaan, semuanya untuk satu sisipan yang menyedihkan. Dengan memotong permintaan pertama, kita dapat mengetahui:
sumber –>>
tempat tujuan
Klien kami,
Dalam hal ini, mongo , bekerja melalui port 57856 dan mengirim pesan ke database (127.0.0.1:27017).
dB
koleksi
Kueri ini untuk koleksi "foo" dari database "tes".
Panjang byte
Panjang permintaan adalah 62 byte. Ini mungkin nyaman jika permintaan Anda mendekati panjang permintaan maksimum (16 MB).
id:
heksadesimal
pengidentifikasi
Ini adalah ID permintaan dalam bentuk heksadesimal dan desimal (jika Anda tidak memiliki komputer, tentu saja). Setiap kueri ke database memiliki pengidentifikasi unik yang terkait dengannya untuk tujuan pajak.
op :
konten .
Ini adalah isi permintaan yang sebenarnya:kami memasukkan dokumen ini. Perhatikan bahwa itu memasukkan nilai floating point 1,0 meskipun kita telah memasukkan 1 di shell. Ini karena JavaScript hanya memiliki satu jenis angka, sehingga setiap angka yang dimasukkan dalam shell diubah menjadi ganda.
Permintaan berikutnya dalam output mongosniff adalah perintah database:memeriksa apakah penyisipan berhasil (shell selalu melakukan penyisipan aman).
Pesan terakhir yang terdengar sedikit berbeda:pesan tersebut berpindah dari database ke shell. Ini adalah respons database terhadap perintah getlasterror. Ini menunjukkan bahwa hanya satu dokumen yang dikembalikan (jawaban n:1) dan tidak ada lagi hasil yang menunggu di database (kursorId:0). Jika ini adalah kueri "nyata" dan ada paket hasil lain untuk dikirim dari database, cursorId akan menjadi bukan nol.