Definição
O estágio $setStreamMeta define campos de metadados para documentos recebidos. Você pode usar esses metadados para executar operações seletivas em documentos com base em valores específicos sem alterar o conteúdo dos próprios documentos.
Sintaxe
Um estágio $setStreamMeta tem o seguinte formato de protótipo:
{ $setStreamMeta: { "<metadata-field>": <expression> } }
O estágio $setStreamMeta recebe um documento com os seguintes campos:
Campo | Tipo | necessidade | Descrição |
|---|---|---|---|
| expressão | Obrigatório |
Comportamento
$setStreamMeta deve vir após o estágio $source e antes do estágio $emit ou $merge.
Exemplos
Uma fonte de dados de streaming gera um documento para cada pedido feito com uma plataforma e-commerce . Os documentos assumem o seguinte formato:
{ orderId: 1, productId: "A", qty: 2 }
Um banco de dados do Atlas contém uma coleção products com documentos do seguinte formato:
[ {_id: "A", name: "Laptop", category: "tech"}, {_id: "B", name: "Shirt", category: "clothing"} ]
A seguinte agregação tem seis estágios:
O estágio
$sourceingere documentos de pedido da plataforma e-commerce, expondo cada registro à medida que é ingerido para os estágios de agregação subsequentes.O estágio $lookup une os documentos do pedido recebido a uma coleção
productsno banco de dadosshopno campo_id. O campo de array resultante é chamadoproduct.O estágio
$unwindtransforma o valor da array de elemento único deproductem um documento.O estágio
$setStreamMetadefine um campo de metadados chamadostream.colligual ao valor deproduct.category.O estágio
$unsetremove o campoproduct, retornando o documento de origem à sua forma original.O estágio $merge mescla o documento em uma coleção determinada dinamicamente pelo valor de
stream.coll.
{ $source: { documents: [ { orderId: 1, productId: "A", qty: 2 }, { orderId: 2, productId: "B", qty: 1 }, { orderId: 3, productId: "A", qty: 5 } ] } }, { $lookup: { from: { connectionName: "atlas", db: "shop", coll: "products" }, localField: "productId", foreignField: "_id", as: "product" } }, { $unwind: "$product" }, { $setStreamMeta: { "stream.coll": "$product.category" } }, { $unset: [ "product" ] }, { $merge: { into: { connectionName: "atlas", db: "shop", coll: { $meta: "stream.coll" } } } }