使用PHP API删除文档不会同步到同步网关Couchbase

时间:2015-01-28 21:46:23

标签: php couchbase couchbase-lite couchbase-sync-gateway

我使用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服务器,而不是从设备中删除。 但是当我从设备中删除文档时,Sync Gateway会通知CB服务器,文档也会从CB服务器中删除。

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

2 个答案:

答案 0 :(得分:1)

有两种方法可以在这里使用Couchbase。

如果你直接与Sync Gateway背后的桶说话,那就是一个人。如果您这样做,它不是使用Couchbase和直接删除文档的预期方法,则不支持这种方法。

另一种可能的方法是,如果您正在使用"shadow buckets" feature。如果您这样做,那么这听起来可能是an issue that needs to be filed

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

答案 1 :(得分:0)

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