MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Use Mongosniff para esclarecer o que seu MongoDB ouve e diz




Escrever um aplicativo em cima do framework em cima do driver em cima do banco de dados é um pouco como um jogo no telefone:você diz “insert foo”, e o banco de dados diz “lava-louças com macacos roxos”.
Mongosniff permite que você veja exatamente o que o banco de dados ouve e diz.
Ele vem com uma distribuição binária, então se você tem um mongod, você deve ter mongosniff .

Para tentar isso, primeiro, execute a instância mongod como de costume:

$ ./mongod

Quando você executa o mongosniff, você deve dizer a ele para ouvir a interface de loopback (localhost). Essa interface geralmente é chamada de “lo”, mas meu Mac a chama de “lo0”, então execute ifconfig para ter certeza de dar o nome correto. Agora execute-o:

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

Nota “sudo”:isso nunca funcionou para mim na minha conta de usuário, provavelmente por causa de algumas permissões de rede estúpidas.

Agora execute o shell do Mongo e tente inserir algo:

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

Se você observar a saída do mongosniff, verá:

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 }

Existem três pedidos, todos para uma inserção miserável. Ao cortar o primeiro pedido, podemos descobrir:

fonte –>>
local de destino

Nosso cliente,
Neste caso, mongo , funciona através da porta 57856 e enviou uma mensagem para o banco de dados (127.0.0.1:27017).
dB
coleção

Esta consulta é para a coleção “foo” do banco de dados “test”.
Comprimento de bytes

O comprimento da solicitação é de 62 bytes. Isso pode ser conveniente se suas solicitações estiverem próximas do tamanho máximo da solicitação (16 MB).

código:
hexadecimal
identificador

Este é o ID do pedido em formato hexadecimal e decimal (caso você não tenha um computador, obviamente). Cada consulta ao banco de dados possui um identificador exclusivo associado a ela para fins fiscais.
op:
conteúdo.

Este é o conteúdo real da solicitação:inserimos este documento. Observe que ele insere um valor de ponto flutuante de 1,0, embora tenhamos inserido 1 no shell. Isso ocorre porque o JavaScript tem apenas um tipo de número, então cada número inserido no shell é convertido em um duplo.
A próxima solicitação na saída de mongosniff é o comando do banco de dados:ele verifica se a inserção foi bem-sucedida (o shell sempre realiza inserções seguras).

A última mensagem ouvida é um pouco diferente:ela vai do banco de dados para o shell. Esta é a resposta do banco de dados ao comando getlasterror. Ele mostra que apenas um documento foi retornado (resposta n:1) e que não há mais resultados aguardando no banco de dados (cursorId:0). Se esta fosse uma consulta “real” e houvesse outro pacote de resultados para enviar do banco de dados, cursorId seria diferente de zero.

MongoDB em 30 minutos