Я уже думал о двух методах, которые мне не нравятся:
Кстати, моя среда – это PHP.
Какие-либо предложения?
Благодаря!
Couchbase в данный момент не предоставил exists
метод, но вы можете использовать add
и delete
для этого, это также полезно для Memcache / Memcached
public function exists($key) { if ($this->object->add($key, true)) { $this->object->delete($key); return false; } return true; }
https://github.com/twinh/widget/blob/master/lib/Widget/Couchbase.php#L118
Легким способом будет сделать get (ключ); если ключ существует, значение возвращается, если операция не возвращает значение null.
Все в порядке с вашим приложением?
Обратите внимание: поскольку все ключи находятся в памяти, так же быстро, как и когда ключ существует или нет.
проверьте этот пример, взятый из couchbase
#retrieve the last access date/time of the script. #the key name is is the script name prefixed with DATE:: $last_access_date=$cb_obj->get("DATE::" . $script_name); #handle the case where this is the first access to the script #and that key doesn't yet exist if($last_access_date == NULL){ $last_access_date = "never"; }
Ссылка статьи
Мне тоже не хватает простого члена Exists
.
В клиенте .Net у вас есть client.TryGet
который, однако, потянет элемент и когда он вернет false
, это на самом деле не означает, что он не существует, просто он не может его вытащить (просто попытался выполнить его с отключить мои узлы).
Опять для клиента. Net, но ExecuteGet
предоставит вам IGetOperationResult
который будет выставлять, например, HasValue
, но снова вытягивает фактическое значение.
Использование представления ? Возможно, немного грязно, но у вас может быть представление, возвращающее только идентификаторы, это избавит вас от необходимости извлекать документ. Не уверен, что это действительно будет лучше.