Menu Docs
Página inicial do Docs
/
MongoDB Atlas
/ /

$lookup

Nesta página

  • Definição
  • Sintaxe
  • Comportamento

O $lookup executa uma união externa esquerda do fluxo de mensagens do seu $source para uma coleção Atlas no seu Registro de Conexão.

Dependendo do seu caso de uso, um estágio de pipeline do $lookup utiliza uma das três sintaxes a seguir:

Para saber mais, consulte Sintaxe $lookup.

Aviso

Usar $lookup para enriquecimento de um fluxo pode reduzir a velocidade de processamento do fluxo.

O seguinte formulário protótipo ilustra todos os campos disponíveis:

{
"$lookup": {
"from": {
"connectionName": "<registered-atlas-connection>",
"db": "<registered-database-name>",
"coll": "<atlas-collection-name>"
},
"localField": "<field-in-source-messages>",
"foreignField": "<field-in-from-collection>",
"let": {
<var_1>: <expression>,
<var_2>: <expression>,
,
<var_n>: <expression>
},
"pipeline": [
<pipeline to run>
],
"as": "<output-array-field>"
}
}

O estágio $lookup recebe um documento com os seguintes campos:

Campo
Tipo
necessidade
Descrição
from
documento
Obrigatório
Documento que especifica uma collection em um banco de dados Atlas para unir às mensagens do seu $source. Você deve especificar uma collection no seu Registro de Conexão. Você deve especificar um valor para todos os campos neste documento.
from.connectionName
string
Obrigatório
Nome da conexão no registro de conexões.
from.db
string
Obrigatório
Nome do banco de dados do Atlas que contém a coleção que você deseja unir.
from.coll
string
Obrigatório
Nome da coleção da qual você deseja participar.
localField
string
Condicional

Campo a partir de suas mensagens $source do qual participar.

Este campo faz parte das seguintes sintaxes:

foreignField
string
Condicional

Campo de documentos na coleção from para participar.

Este campo faz parte das seguintes sintaxes:

let
documento
Condicional

Especifica as variáveis a serem usadas nos estágios do pipeline. Para saber mais, consulte let.

Este campo faz parte das seguintes sintaxes:

gasoduto
documento
Condicional

Especifica o pipeline a ser executado na coleção associada. Para saber mais, consulte pipeline.

Este campo faz parte das seguintes sintaxes:

como
string
Obrigatório
Nome do novo campo de array a ser adicionado aos documentos de entrada. Este novo campo de array contém os documentos correspondentes da coleção from. Se o nome especificado já existir como campo no documento de entrada, esse campo será substituído.

A versão Atlas Stream Processing de $lookup executa uma junção externa esquerda de mensagens de seu $source e os documentos em uma collection especificada do Atlas. Essa versão se comporta de forma semelhante ao estágio $lookup disponível em um banco de dados MongoDB padrão. No entanto, esta versão exige que você especifique uma coleção do Atlas do seu Registro de Conexão como o valor para o campo from .

O pipeline pode conter uma fase $lookup aninhada. Se você incluir uma fase $lookup aninhada em seu pipeline, utilize a sintaxe from padrão para especificar uma coleção na mesma conexão remota do Atlas que a fase $lookup externa.

Exemplo

$lookup : {
from: {connectionName: "dbsrv1", db: "db1", coll: "coll1"},
,
pipeline: [
,
{
$lookup: {
from: "coll2",
,
}
},
,
]
}

Se o seu pipeline tiver $lookup e $merge na mesma coleção, os resultados do Atlas Stream Processing poderão variar se você tentar manter uma exibição incremental. O Atlas Stream Processing processa várias mensagens de origem simultaneamente e, em seguida, as mescla todas. Se várias mensagens tiverem o mesmo ID, que $lookup e $merge usam, o Atlas Stream Processing poderá retornar resultados que ainda não foram materializados.

Exemplo

Considere o seguinte fluxo de entrada:

{ _id: 1, count: 2 }
{ _id: 1, count: 3 }

Suponha que sua query contenha o seguinte dentro do pipeline:

{
...,
pipeline: [
{ $lookup on _id == foreignDoc._id from collection A }
{ $project: { _id: 1, count: $count + $foreignDoc.count } }
{ $merge: { into collection A } }
]
}

Se estiver tentando manter uma visualização gradual, o resultado poderá ser semelhante ao seguinte:

{ _id: 1, count: 5 }

No entanto, o Atlas Stream Processing pode retornar uma contagem de 5 ou 3, dependendo se o Atlas Stream Processing processou os documentos.

Para obter mais informações, consulte $lookup.

← $validar