3
respostas

Consulta where

Pessoal, fazendo o curso de mongo e surgiu uma dúvida básica. Consigo fazer uma consulta do tipo where cidade = campinas and nome = Paulo?

É tmb conseguiria fazer isso em mais de uma coleção?

Pergunto pq assim já nem co tinuo o curso senão puder fazer isso RS.

Abs

3 respostas

Olá Renato, tudo bem?

Não sei qual linguagem você está utilizando para programar com o MongoDB. Mas, você pode fazer uma querry, mais ou menos assim:

SELECT * FROM sua_tabela WHERE nome LIKE '%PAULO%'
SELECT * FROM sua_tabela WHERE cidade LIKE '%CAMPINAS%'

O correspondente em MongoDB será:

$filter = array( "nome" => new MongoRegex('/.PAULO./' );
$filter = array( "cidade" => new MongoRegex('/.CAMPINAS./' );

Você pode também realizar outras operações:

SQL: select * from usuarios where UsuarioID IN (2,14,16)
MongoDB: $filter = array("UsuarioID" => array('$in' => array(2,14,16)));

SQL: select * from usuarios where UsuarioID NOT IN (2,14,16)
MongoDB: $filter = array("UsuarioID" => array('$nin' => array(2,14,16)));

SQL: select * from usuarios where UsuarioID > 33
MongoDB: $filter = array("UsuarioID" => array('$gt' => 33));

SQL: select * from usuarios where UsuarioID >= 33
MongoDB: $filter = array("UsuarioID" => array('$gte' => 33));

SQL: select * from usuarios where UsuarioID < 33
MongoDB: $filter = array("UsuarioID" => array('$lt' => 33));

SQL: select * from usuarios where UsuarioID <= 33
MongoDB: $filter = array("UsuarioID" => array('$lte' => 33));

SQL: select * from usuarios where UsuarioID <> 33
MongoDB: $filter = array("UsuarioID" => array('$ne' => 33));

Você pode encontrar mais informações através do link.

Legal, valeu George.

Mas eu não encontrei uma forma de fazer uma query para dois campos ou mais na mesma filter ou até mesmo consultar em coleções diferentes.

Ex: SQL: select * from usuarios where (UsuarioID <> 33 and Idade < 40)

OU

EX: SQL: SELECT * FROM CLIENTES AS C JOIN PEDIDOS AS P ON C.IDCLIENTE = P.IDPEDIDO

OU

EX: SQL

SELECT C.NOMECARGO [CARGO], F.NOMEFUNCIONARIO AS [FUNCIONÁRIO], F.SALARIOFUNCIONARIO AS [SALÁRIO] FROM CARGO AS C INNER JOIN FUNCIONARIO AS F ON C.IDCARGO = F.IDCARGO

Isso eu consigo?

Você pode fazer a query para consultar dois campos. De acordo com a documentação do MongoDB, você pode fazer algo nessa linha:

db.bios.find( {
   birth: { $gt: new Date('1920-01-01') },
   death: { $exists: false }
} )

Já fazer o JOIN,

Desde a versão 3.2, o MongoDB limitou o suporte aos OUTER JOINS com o operador de agregação $lookup.

O MongoDB não faz queries em múltiplas coleções. Quando você precisa juntar os dados de múltiplas coleções, você vai precisar fazer múltiplas queries.

Você pode pegar mais informações na documentação do comando $lookup.