O Object Store realiza operações para armazenar qualquer documento no Object Store da Digibee. É uma maneira rápida e fácil de salvar informações úteis do tipo JSON, que possui operações para auxiliar em diversos usos durante a criação de um pipeline.

Dê uma olhada nos parâmetros de configuração do componente:

  • Account: conta que será utilizada pelo componente. Este item não pode ser alterado.

  • Operation: operação que será executada dentro do Object Store - Find by Object ID, Find By Query, Insert, Aggregate, Update By Object Id, Update By Query, Delete By Object Id e Delete By Query.

  • Object Store Name: nome da coleção que será utilizada para gravar ou ler informações. Caso não exista, ela será criada automaticamente. Este item suporta Double Braces.

  • Object ID: identificador do objeto que será armazenado ou buscado. Pode ser um número ou um UUID. Este item suporta Double Braces.

  • Limit: número máximo de objetos que serão retornados em uma busca. Este item suporta Double Braces.

  • Skip: quantidade de objetos a serem pulados antes de retornar para a query. Este parâmetro é normalmente utilizado em conjunto com o parâmetro “Limit” para criar uma forma de paginação. Este item suporta Double Braces.

  • Sort: especificação das regras de ordenação da query. Este item suporta Double Braces.

  • Unique Index: se a opção estiver ativada, será criado um Object ID que aceita apenas valores únicos; do contrário, um index não único será criado.

  • Isolated: se a opção estiver ativada, todas as queries serão delimitadas no escopo de execução.

  • Upsert: este item só aparece se o parâmetro "Operation" for Update By Object Id ou Update By Query. Quando este item estiver ativado, o objeto informado para o componente será inserido na coleção caso ele não exista.

  • Fail On Error: se a opção estiver habilitada, a execução do pipeline com erro será interrompida; do contrário, a execução do pipeline continua, mas o resultado vai mostrar um valor falso para a propriedade "success".

Alguns dos parâmetros acima aceitam Double Braces. Para entender melhor como funciona essa linguagem, leia o nosso artigo clicando aqui.

Fluxo de mensagens

Entrada

Para esse componente específico, o único padrão de mensagem de entrada obrigatória é o formato JSON aplicado ao objeto. O parâmetro de entrada pode utilizar a sintaxe de Double Braces para enviar a mensagem recebida para o componente.

Saída

  • Insert

{
"data": [],
"updateCount": 1
}

  • Find

{
"data": [
{
"name": "Galaxy s20",
"uuid": "123",
"_oId": "1"
}
],
"rowCount": 1
}

  • Update

{
"data": [],
"updateCount": 1
}

  • Delete

{
"data": [],
"updateCount": 1
}

  • Aggregate

{
"data": [],
"rowCount": 0
}

Object Store em Ação

Acima foram demonstrados alguns exemplos de saída de cada operação. Veja abaixo mais aplicações que demonstram a configuração correta para que se obtenha determinado resultado:

  • Inserir diversos itens de uma única vez em uma coleção

Ao enviar um array de objetos no campo query, o componente insere cada item de forma separada dentro da coleção selecionada.

Observe como configurar o componente com os parâmetros "Operation: Insert", "Unique Index: False" e "Query":

[
{
"id": 1,
"name": "Galaxy s20",
"price": 5000
},
{
"id": 2,
"name": "Samsung 4k 55\"",
"price": 5000
},
{
"id": 3,
"name": "Galaxy A10",
"price": 699
},
{
"id": 4,
"name": "Galaxy A51",
"price": 1620
}
]

Saída

{
"data": [],
"updateCount": 4
}

IMPORTANTE: a inserção de múltiplos objetos de uma só vez é permitida apenas em coleções criadas com "Unique Index: false". A propriedade Unique Index é definida na criação da coleção. Depois que o index é criado, não é possível alterar a propriedade.

  • Encontrar itens a partir de uma determinada query

Como exemplo, considere um Object Store que já possui itens cadastrados do tipo produto e que tem as características de nome e preço.

Observe como configurar o componente com os parâmetros "Operation: Find By Query" e "Query":

{
"product.price": { $gt: 2000 }
}

Saída

{
"data": [
{
"product": {
"id": 1,
"name": "Galaxy s20",
"price": 5000
},
"_oId": "1"
},
{
"product": {
"id": 2,
"name": "Samsung 4k 55\"",
"price": 5000
},
"_oId": "2"
}
],
"rowCount": 2
}

  • Encontrar todos os itens a partir de uma query

Como exemplo, considere um Object Store que já possui itens cadastrados do tipo produto e que tem as características de nome e preço.

Observe como configurar o componente com os parâmetros "Operation: Find By Query", "Limit: 10" e "Query":

{}

Saída

{
"data": [
{
"product": {
"id": 1,
"name": "Galaxy s20",
"price": 5000
},
"_oId": "1"
},
{
"product": {
"id": 2,
"name": "Samsung 4k 55\"",
"price": 5000
},
"_oId": "2"
},
{
"product": {
"id": 3,
"name": "Galaxy A10",
"price": 699
},
"_oId": "3"
},
{
"product": {
"id": 4,
"name": "Galaxy A51",
"price": 1620
},
"_oId": "4"
}
],
"rowCount": 4
}

Nesse cenário específico, o parâmetro limit foi configurado para que não haja uma sobrecarga desnecessária ao retornar os objetos de um Object Store. Caso a opção não seja configurada dessa forma, poderá ocorrer um erro de "Out Of Memory" dentro do pipeline. Da maneira indicada, existe controle sobre quantos objetos são visualizados na resposta.

  • Atualizar um item a partir de um ID específico

Como exemplo, considere um Object Store que já possui itens cadastrados do tipo produto e que possui as características de nome e preço.

Observe como configurar o componente com os parâmetros "Operation: Update By Object Id", "Object Id: 3" e "Document":

{
$set: {
"product": {
"id": 3,
"name": "Galaxy A10",
"price": 605
}
}
}

Saída

{
"data": [],
"updateCount": 1
}

Nesse cenário específico, é possível ver que a saída é apenas um objeto identificando a realização de um update. Para visualizar se o objeto foi devidamente atualizado, repita o cenário da busca por ID.

IMPORTANTE: se o componente Object Store estiver envolvido em atualizações, dentro de um componente de iterações (For Each, Stream File Reader, etc.) e realizando execuções paralelas, pode haver concorrência na atualização de registros caso as instruções de atualização de registros sejam exatamente iguais. Consequentemente, uma instrução retornará "updateCount":1 e a outra "updateCount": 0. Isso acontece quando 2 registros exatamente iguais entram no pool de operação do Object Store e as instruções de atualização ou inserção (UPSERT habilitado) são executadas sequencialmente. A primeira instrução efetiva uma atualização e a segunda encontra o registro já persistido e verifica que não há nada a ser modificado, retornando que nenhuma ação foi necessária ("updateCount": 0).

  • Remover um item a partir de um ID específico

Como exemplo, considere um Object Store que já possui itens cadastrados do tipo produto e que tem as características de nome e preço.

Observe como configurar o componente com os parâmetros "Operation: Delete By Object Id", "Object Id: 4".

Saída

{
"data": [],
"updateCount": 1
}

Nesse cenário específico, é possível ver que a saída é apenas um objeto identificando a realização de um update. Para visualizar se o objeto foi devidamente removido, repita o cenário da busca por ID.

  • Agregação para cópia da coleção

Como exemplo, considere um Object Store chamado product que já possui itens cadastrados do tipo produto e que tem as características de nome e preço. A partir disso, crie um novo Object Store chamado product-backup, copiando todos os itens da coleção mencionada acima.

Você deve receber um array de objetos contendo os pipelines de agregação da query no parâmetro “document”.

Observe como configurar o componente com os parâmetros "Operation: Aggregate" e "Query":

[
{
$merge: {
into: "product-backup",
on: "_id",
whenMatched: "replace",
whenNotMatched: "insert"
}
}
]

Nesse cenário específico, a query foi configurada para substituir itens repetidos pelos novos na coleção.

Saída

{
"data": [],
"rowCount": 0
}

Para verificar se a coleção foi devidamente criada com os itens propostos, repita o cenário da busca por todos os itens e informe a coleção nova.

  • Agregação para filtro de itens da coleção

Você deve receber um array de objetos contendo os pipelines de agregação da query no parâmetro “document”.

Observe como configurar o componente com os parâmetros "Operation: Aggregate" e "Query":

[
{
$match: {
"product.price": {
$gt: 3000
}
}
},
{
$group: {
_id: null,
count: {
$sum: 1
}
}
}
]

Nesse cenário específico, a query foi configurada para buscar os produtos que possuem determinado valor e apenas apresentar a soma deles.

Saída

{
"data": [
{
"count": 2
}
],
"rowCount": 0
}

Tecnologia

O Object Store utiliza operadores de busca e agregação de objetos semelhantes à sintaxe do MongoDB. Para conhecê-la, clique aqui.

Encontrou sua resposta?