MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como adicionar um json em uma matriz aninhada de um documento mongodb usando Spring?


Esta consulta de atualização adiciona o JSON à matriz aninhada, "SERVICES.VERSIONS.GROUPS.CUSTOMERS" , com base nas condições de filtro especificadas. Observe que suas condições de filtro direcionam a operação de atualização para o array específico (dos arrays aninhados).
// JSON document to be added to the CUSTOMERS array
new_cust = { 
             "CUSTOMER_CONFIG_ID": "6", 
             "ACTIVATION_DATE": "31-03-2020", 
             "STATUS": "Y" 
}

db.collection.update( 
  { 
      "SERVICE_CATEGORY": "COMMON_SERVICE", 
      "SERVICES.SERVICE_NAME": "Authentication Service",
      "SERVICES.VERSIONS.VERSION_NAME": "AuthenticationServiceV6_3"
  }, 
  { 
      $push: { "SERVICES.$[s].VERSIONS.$[v].GROUPS.$[g].CUSTOMERS": new_cust } 
  },
  {
      multi: true,
      arrayFilters: [
          { "s.SERVICE_NAME": "Authentication Service" },
          { "v.VERSION_NAME": "AuthenticationServiceV6_3" },
          { "g.GROUP_NAME": "TEST GROUP" }
      ]
  }
);

Algumas coisas a serem observadas ao atualizar documentos com matrizes aninhadas de mais de um nível de aninhamento.
  • Use o operador de todas as posições $[] e o operador posicional filtrado $[<identifier>] , e não o $ operador posicional. Com o operador posicional filtrado, especifique as condições do filtro de matriz usando os arrayFilters parâmetro. Observe que isso direcionará sua atualização para direcionar a matriz aninhada específica.
  • Para o operador posicional filtrado $[<identifier>] , o identificador deve começar com uma letra minúscula e conter apenas caracteres alfanuméricos.

Referências:
  • Operadores de atualização de matriz
  • db.collection.update() com arrayFilters