sql >> Database >  >> NoSQL >> MongoDB

Hoe voeg je een json toe aan een geneste array van een mongodb-document met Spring?

Deze updatequery voegt de JSON toe aan de geneste array, "SERVICES.VERSIONS.GROUPS.CUSTOMERS" , gebaseerd op de gespecificeerde filtervoorwaarden. Merk op dat uw filtervoorwaarden de update naar de specifieke array (van de geneste arrays) sturen.

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

Weinig dingen om op te letten bij het bijwerken van documenten met geneste arrays van meer dan één niveau nesten.

  • Gebruik de all-positionele operator $[] en de gefilterde positionaloperator $[<identifier>] , en niet de $ positionele operator. Met gefilterde positionele operator specificeert u de arrayfiltervoorwaarden met behulp van de arrayFilters parameter. Houd er rekening mee dat uw update hierdoor wordt gericht op de specifieke geneste array.
  • Voor de gefilterde positionele operator $[<identifier>] , moet de identifier beginnen met een kleine letter en alleen alfanumerieke tekens bevatten.

Referenties:

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


  1. MongoDB $sortByCount Aggregation Operator

  2. Redis gebruiken met Node.js en Socket.IO

  3. Verbinding maken met MongoDB 3.0 met Java Spring

  4. Meteor mongo werkt geneste array bij