2015-05-27 15 views
5

Arangodb'de ek iç nesneler bulunan bir nesneye sahibim, geçerli kullanım durumum, yalnızca öğelerden birini güncelleştirmem gerekiyor.İç nesneyi arangodb içinde güncelleştirin

Mağaza Nesne

{ 
    "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" 
    } 
    ] 
} 
Ben ürünlerin bir tanesinin güncelleme mağaza ürün stok gibi stok değerini

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

değiştirmek istiyorum

az 1 nerede mağaza id = x, bu yönde bir şey

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 

ab muhtemelen, store_products koleksiyonundaki ürünü ayrı bir doküman olarak saklamak mantıklıdır. Belge boyutunu küçültmek için en iyi yaklaşım olan NOSQL'e inanıyorum.

cevap

5

Bulunan cevap

burada arangodb-aql-update-single-object-in-embedded-array

ve orada arangodb-aql-update-for-internal-field-of-object

Ben ancak ayrı belge korumak en iyisidir ve alınırken yerine kullanılması katılır inanıyoruz. Güncellemeler kolayca

+0

Doğru olduğunu düşünüyorum. Ürünlerin mağazalardan ayrı olarak depolanması mantıklı olacaktır. Bu, bireysel ürünlerin (ve mağazaların) kolayca ve verimli bir şekilde güncellenmesini sağlayacaktır. Mağaza ve tüm ürünleri, yukarıdaki gibi tek bir dokümanda yer aldıysa, tüm ürün güncellemeleri için tüm mağaza nesnesinin kaydedilmesi gerekir; bu da çok verimsiz olur. Bunun dışında, 'inStock' değerini dizeleri kullanmak yerine bir sayı olarak saklamak mantıklı olabilir. Aynı fiyatlar için de geçerlidir. – stj

İlgili konular