2015-05-27 63 views
5

Tôi có một đối tượng được lưu trữ trong arangodb có các đối tượng bên trong bổ sung, trường hợp sử dụng hiện tại của tôi yêu cầu tôi chỉ cập nhật một trong các thành phần.Cập nhật đối tượng bên trong trong arangodb

cửa hàng Object

{ 
    "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" 
    } 
    ] 
} 

Tôi muốn thay đổi chỉ là một trong các sản phẩm chứng khoán giá trị

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

Giống như chứng khoán cập nhật cửa hàng sản phẩm ít 1 nơi lưu trữ id = x, một cái gì đó để tác động này

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 

Ngoài ab ove có thể có ý nghĩa khi lưu trữ sản phẩm dưới dạng tài liệu riêng trong bộ sưu tập store_products. Tôi tin vào NOSQL đó là cách tiếp cận tốt nhất để giảm kích thước tài liệu.

Trả lời

5

Tìm thấy câu trả lời

đây arangodb-aql-update-single-object-in-embedded-array và có arangodb-aql-update-for-internal-field-of-object

tuy nhiên tôi tin rằng nó là tốt nhất để duy trì các tài liệu riêng biệt và khá sử dụng tham gia khi lấy. Cập nhật dễ dàng

+0

Tôi nghĩ bạn nói đúng. Lưu trữ sản phẩm riêng biệt từ các cửa hàng sẽ có ý nghĩa. Điều đó sẽ cho phép cập nhật các sản phẩm riêng lẻ (và các cửa hàng) một cách dễ dàng và hiệu quả. Nếu cửa hàng và tất cả các sản phẩm của nó được chứa trong một tài liệu duy nhất như trên, thì toàn bộ đối tượng lưu trữ sẽ cần phải được lưu cho mọi bản cập nhật sản phẩm, điều này sẽ rất không hiệu quả. Ngoài ra, nó có thể có ý nghĩa để lưu trữ giá trị 'inStock' dưới dạng số thay vì sử dụng chuỗi. Điều tương tự cũng áp dụng cho giá cả. – stj

Các vấn đề liên quan