Couchbase - 创建视图并立即访问其数据

时间:2014-06-17 09:29:12

标签: java view couchbase

说我需要一个(自动)升级脚本来重置所有用户'平衡如果它<< s< 0

我想运行一个java代码:

  1. 使用适当的地图功能创建视图(即只有'用户' docs,其余为< 0)
  2. 扫描视图并更新用户
  3. 我知道如何使用&CouchbaseClient.createDesignDoc'来创建视图。以及如何使用View / Query Java API查询它

    我缺少的是两个问题:

    1. 如何将该视图发布到生产中?目前,视图是在开发模式下创建的,因此只扫描“用户”的子组。文件

    2. 如何确保创建视图后,它将被编入索引所有数据,包括当前在Couchbase上的数据

      < / LI>

      由于

      的Eyal

1 个答案:

答案 0 :(得分:3)

我很乐意回答我自己的问题,希望能帮助其他人

1。
在&#34;生产模式&#34;中创建视图你创建它的任何名称,但名称以&#34开头; dev _&#34; (!)---我没有找到任何适当的文件给这个小小的噱头

所以这将是你的代码:

// Production Mode Design Doc - no dev_ prefix in name!
DesignDocument designDoc = new DesignDocument("Users"); // not "dev_Users" !
ViewDesign viewDesign = new ViewDesign("NegativeBalance", mapFunction);
designDoc.getViews().add(viewDesign);
cbClient.createDesignDoc(designDoc);



2.
适用于couchbase 3.0及更新版
为了确保查询视图并让所有结果等待,视图的陈旧属性为FALSE

View view = client.getView("Users", "NegativeBalance"); // production Design Doc
Query query = new Query();
query.setStale(Stale.FALSE); // Read all data 

这很有用(是的,陈旧= FALSE是性能打击)

适用于Couchbase 2.x及更早版本
您的更新需要使用stale = FALSE和PersistTo标志

client.ExecuteStore(StoreMode.Set, key, val, 
    Couchbase.Operations.PersistTo.One, 
    Couchbase.Operations.ReplicateTo.Zero);

Details on couchbase blog

希望有所帮助

的Eyal