1

我使用 PHP SDK 从设计视图中获取文档并删除它们。

$myCluster = new CouchbaseCluster('couchbase://127.0.0.1');
$myBucket = $myCluster->openBucket($bucketName);
$query = CouchbaseViewQuery::from('dev_view', 'old_docs');
$res = $myBucket->query($query);
foreach ($res['rows'] as $doc) 
    $res = $myBucket->remove($doc['key']);

视图中的所有文档都会从 Couchbase 服务器中删除,但 Couchbase 不会通知 Sync Gateway 从设备中删除它们。当我在任何设备(Android 平板电脑)上启动应用程序时,文档开始同步回 Couchbase 服务器,而不是从设备中删除。但是当我从设备中删除文档时,同步网关会通知 CB 服务器,并且文档也会从 CB 服务器中删除。

PHP SDK 有什么错误吗?我应该在删除文档后调用一个函数来通知 Sync Gateway 吗?

4

2 回答 2

1

有两种可能的方式可以在这里使用 Couchbase。

一种是您直接与 Sync Gateway 后面的存储桶交谈。如果您这样做,这不是使用 Couchbase 的预期方式,并且直接删除文档没有受支持的方法。

另一种可能的方法是,如果您使用的是“影子桶”功能。如果您正在这样做,那么这听起来可能是一个需要提交的问题

作为一种解决方法,您可能想要做的是使用您的视图来识别“旧文档”,而不是通过 SDK 的界面删除它们,而是尝试通过Sync Gatway REST API删除它们。

于 2015-01-29T01:59:47.613 回答
0

在影子存储桶上创建一个视图并从影子存储桶中删除文档。影子桶上的删除将被复制到同步桶,并添加同步/复制所需的元数据(例如_deleted = true)。现在,在影子存储桶中进行的任何删除都会被通知/复制到移动设备。

于 2016-06-14T12:53:01.047 回答