Eu tenho uma coleção de widgets que possui registros como este:
{ "_id" : ObjectId("55a6abe193819c033d4d755a"), "name" : "widget1"}
{ "_id" : ObjectId("55a6abe193819c033d4d755a"), "name" : "widget2", "loc" : ObjectId("55a69475da314d9984fc6201") }
Eu também tenho uma coleção de locais que se parece com isso:
{ "_id" : ObjectId("55a69475da314d9984fc6201"), "abbrev" : "CAN", "description" : "Canada" }
{ "_id" : ObjectId("55a6948eda314d9984fc6202"), "abbrev" : "USA", "description" : "United States" }
{ "_id" : ObjectId("55a69496da314d9984fc6203"), "abbrev" : "MEX", "description" : "Mexico" }
Se eu quiser encontrar todos os widgets localizados no Canadá, usando o Objectid, sei que posso fazer isso:
> db.widgets.find( { loc: ObjectId("55a69475da314d9984fc6201")})
{ "_id" : ObjectId("55a6abe193819c033d4d755a"), "name" : "widget2", "loc" : ObjectId("55a69475da314d9984fc6201") }
Mas e se eu quiser procurar locais não usando o objectid, mas a abreviação ou a descrição? Como eu faria isso?
Para consultar duas coleções com dados relacionados, a abordagem comum (como no MongoDB 3.0) é encontrar uma lista de
_id
valores correspondentes da primeira coleção que pode ser usada com uma$in
consulta na segunda.Aqui está um exemplo usando o
mongo
shell:Dependendo do driver e/ou estrutura que você está usando, pode haver funções auxiliares para facilitar o preenchimento dos dados relacionados. Essas funções auxiliares resultarão em várias consultas, pois atualmente não há suporte do lado do servidor para junções.
Alguns exemplos de frameworks com helpers (não pretende ser uma lista abrangente):
mongo
shell interativo adicionando suporte para visualizações consultáveis / coleções virtuaisVocê pode notar que eu disse que atualmente não há suporte do lado do servidor para preencher dados. Na verdade, há um novo
$lookup
operador sendo adicionado ao Aggregation Framework no ciclo de desenvolvimento do MongoDB 3.1.x (que culminará na eventual série de lançamentos de produção do MongoDB 3.2). Para obter mais informações, consulte: SERVER-19095 no rastreador de problemas do MongoDB Jira.Por favor, tente a consulta abaixo
A consulta acima unirá o objeto de locais com o widget e o filtro com o local do Canadá.