2015-05-27 19 views
5

Ich habe ein Objekt in Arangodb gespeichert, die zusätzliche innere Objekte hat, erfordert mein aktueller Anwendungsfall, dass ich nur eines der Elemente aktualisieren.Update inneres Objekt in Arangodb

Shop Objekt

{ 
    "status": "Active", 
    "physicalCode": "99999", 
    "postalCode": "999999", 
    "tradingCurrency": "USD", 
    "taxRate": "14", 
    "priceVatInclusive": "No", 
    "type": "eCommerce", 
    "name": "John and Sons inc", 
    "description": "John and Sons inc", 
    "createdDate": "2015-05-25T11:04:14+0200", 
    "modifiedDate": "2015-05-25T11:04:14+0200", 
    "physicalAddress": "Corner moon and space 9 station", 
    "postalAddress": "PO Box 44757553", 
    "physicalCountry": "Mars Sector 9", 
    "postalCountry": "Mars Sector 9", 
    "createdBy": "john.doe", 
    "modifiedBy": "john.doe", 
    "users": [ 
    { 
     "id": "577458630580", 
     "username": "john.doe" 
    } 
    ], 
    "products": [ 
    { 
     "sellingPrice": "95.00", 
     "inStock": "10", 
     "name": "School Shirt Green", 
     "code": "SKITO2939999995", 
     "warehouseId": "723468998682" 
    }, 
    { 
     "sellingPrice": "95.00", 
     "inStock": "5", 
     "name": "School Shirt Red", 
     "code": "SKITO245454949495", 
     "warehouseId": "723468998682" 
    }, 
    { 
     "sellingPrice": "95.00", 
     "inStock": "10", 
     "discount": "5%", 
     "name": "School Shirt Blue", 
     "code": "SKITO293949495", 
     "warehouseId": "723468998682" 
    } 
    ] 
} 

I

{ 
    "sellingPrice": "95.00", 
    "inStock": "10", 
    "discount": "5%", 
    "name": "School Shirt Blue", 
    "code": "SKITO293949495", 
    "warehouseId": "723468998682" 
} 

Wie Update Store Produkt Lager nur eines der Produkte Bestandswert ändern wollen weniger 1, wo Speicher id = x, etwas zu diesem Effekt

FOR store IN stores 
    FILTER store._key == "837108415472" 
    FOR product IN store.products 
     FILTER product.code == "SKITO293949495" 
    UPDATE product WITH { inStock: (product.inStock - 1) } IN store.products 

Abgesehen von der ab Möglicherweise ist es sinnvoll, das Produkt als separates Dokument in der Kollektion store_products zu speichern. Ich glaube an NOSQL, das ist der beste Ansatz, um die Dokumentengröße zu reduzieren.

Antwort

5

Gefunden Antwort

hier arangodb-aql-update-single-object-in-embedded-array und dort arangodb-aql-update-for-internal-field-of-object

ich aber glaube, dass es am besten ist, separate Dokumente zu erhalten und eher verbindet Verwendung beim Abrufen. Updates leicht

+0

Ich denke, du hast Recht. Es ist sinnvoll, Produkte getrennt von Geschäften zu lagern. Dies ermöglicht eine einfache und effiziente Aktualisierung einzelner Produkte (und Speicher). Wenn der Speicher und alle seine Produkte wie oben in einem einzelnen Dokument enthalten wären, müsste das gesamte Speicherobjekt für jedes Produkt-Update gespeichert werden, was sehr ineffizient wird. Abgesehen davon kann es sinnvoll sein, den 'inStock'-Wert als Zahl zu speichern, anstatt Strings zu verwenden. Gleiches gilt für die Preise. – stj