很不错,但是如何对一个文档进行更新呢?可以做的更新有两种:更改现有字段值;添加新字段和新值。对于后者,可以使用箭头表示法(比如 $doc->new_field),然后通过 storeDoc() 保存更改。清单 7 显示了更新一个文档所需的代码。
清单 7. 更新一个文档
$doc->genre = 'hip-hop';
$doc->year = 2008;
try {
$response = $client->storeDoc($doc);
} catch (Exception $e) {
echo "Error: ".$e->getMessage()." (errcode=".$e->getCode().")\n";
exit(1);
}
运行此代码,然后就可以检索这个文档 ID 并获得清单 8 内所示的结果。
清单 8. 更新后的文档
stdClass Object
(
[_id] => whatever_you_like
[_rev] => 2-12513a362693b300928aa45f82faed83
[title] => Whatever You Like
[artist] => T.I.
[album] => Paper Trail
[genre] => hip-hop
[year] => 2008
)
注意到 _rev 属性已经从之前的 1-whatever 增加为 2-whatever。借此,就可以很容易地判断已经发生了更改。
那么,该如何在数据库内存储一个新文档呢?您可以实例化一个新对象并使用箭头表示法来填充文档内的字段。清单 9 显示了所需代码。
清单 9. 创建一个新文档
$song = new stdClass();
$song->_id = "in_the_meantime";
$song->title = "In the Meantime";
$song->album = "Resident Alien";
$song->artist = "Space Hog";
$song->genre = "Alternative";
$song->year = 1995;
try {
$response = $client->storeDoc($song);
} catch (Exception $e) {
echo "Error: ".$e->getMessage()." (errcode=".$e->getCode().")\n";
exit(1);
}
print_r($response);
结果应该类似清单 10。
stdClass Object
(
[ok] => 1
[id] => in_the_meantime
[rev] => 1-d65b03a9fe2f3c8095b08883e7cd97df
)
上一篇:使用参数化查询防止SQL注入漏洞 下一篇:未来5年程序员应当具备的十项技能