Search code examples
phpriak

Delete Map with key in riak


I am using riak php client and have datatype map. I want to delete entire map by key which is itemid. here is my code

        $location = new Location($itemID, $this->itemBucket);
        $map = (new \Command\Builder\FetchMap($this->riak))
        ->atLocation($location)
        ->build()
        ->execute()->getMap();

        (new \Command\Builder\UpdateMap($this->riak))
        ->removeMap($itemID)
        ->atLocation($location)
        ->withContext($map->getContext())
        ->build()
        ->execute();

but this is not working.


Solution

  • I think you are confusing the KV key containing a map object and a map key containing a nested map.

    This location will refer to "http://riaknode:8098/buckets/$this->itemBucket/keys/$itemID"

        $location = new Location($itemID, $this->itemBucket);
    

    This retrieves the mapt object contained by the above bucket/key

        $map = (new \Command\Builder\FetchMap($this->riak))
        ->atLocation($location)
        ->build()
        ->execute()->getMap();
    

    This attempts to remove the element with the key $itemID from the returned map object

        (new \Command\Builder\UpdateMap($this->riak))
        ->removeMap($itemID)
        ->atLocation($location)
        ->withContext($map->getContext())
        ->build()
        ->execute();
    

    If you want to remove the entire map stored under that bucket/key, you probably need to use a \Command\Builder\DeleteObject