sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cómo agregar un json en una matriz anidada de un documento mongodb usando Spring?

Esta consulta de actualización agrega el JSON a la matriz anidada, "SERVICES.VERSIONS.GROUPS.CUSTOMERS" , en función de las condiciones de filtro especificadas. Tenga en cuenta que las condiciones de su filtro dirigen la operación de actualización a la matriz específica (de las matrices anidadas).

// 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" }
      ]
  }
);

Algunas cosas a tener en cuenta al actualizar documentos con matrices anidadas de más de un nivel de anidamiento.

  • Usar el operador de todas las posiciones $[] y el operador posicional filtrado $[<identifier>] , y no el $ operador posicional. Con el operador posicional filtrado, especifique las condiciones del filtro de matriz mediante arrayFilters parámetro. Tenga en cuenta que esto dirigirá su actualización para apuntar a la matriz anidada específica.
  • Para el operador posicional filtrado $[<identifier>] , el identificador debe comenzar con una letra minúscula y contener solo caracteres alfanuméricos.

Referencias:

  • Operadores de actualización de matrices
  • db.collection.update() con arrayFilters