sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur lägger man till en json i en kapslad array av ett mongodb-dokument med Spring?

Denna uppdateringsfråga lägger till JSON till den kapslade arrayen, "SERVICES.VERSIONS.GROUPS.CUSTOMERS" , baserat på de angivna filtervillkoren. Observera att dina filtervillkor styr uppdateringsoperationen till den specifika arrayen (av de kapslade arrayerna).

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

Några saker att notera när du uppdaterar dokument med kapslade arrayer av mer än en nivå häckning.

  • Använd all positionsoperatorn $[] och den filtrerade positionsoperatorn $[<identifier>] , och inte $ positionsoperator. Med filtrerad positionsoperator ange arrayfiltervillkoren med arrayFilters parameter. Observera att detta kommer att styra din uppdatering till den specifika kapslade arrayen.
  • För den filtrerade positionsoperatorn $[<identifier>] , måste identifieraren börja med en liten bokstav och endast innehålla alfanumeriska tecken.

Referenser:

  • Array UpdateOperators
  • db.collection.update() med arrayFilters


  1. Klona en samling i MongoDB

  2. MongoDB $sampleRate

  3. Mongoose String till ObjectID

  4. Hur man lagrar array av hash i redis