我正在尝试创建一个junit测试。情形:
我的观点:
function (doc, meta) {
if (doc.type && doc.type == "UserConnection") {
emit([doc.providerId, doc.providerUserId], doc.userId);
}
}
这是我将这些文档添加到数据库并确保“添加”是同步的方式:
public boolean add(String key, Object element) {
String json = gson.toJson(element);
OperationFuture<Boolean> result = couchbaseClient.add(key, 0, json);
return result.get();
}
我正在添加的JSON文档是:
{ “用户id”: “1”, “providerId”: “test_pId”, “providerUserId”: “test_pUId”, “类型”: “UserConnection”}
{ “用户id”: “2”, “providerId”: “test_pId”, “providerUserId”: “test_pUId”, “类型”: “UserConnection”}
这就是我调用视图的方式:
View view = couchbaseClient.getView(DESIGN_DOCUMENT_NAME, VIEW_NAME);
Query query = new Query();
query.setKey(ComplexKey.of("test_pId", "test_pUId"));
ViewResponse viewResponse = couchbaseClient.query(view, query);
的问题:
我的观察:
我的问题:
谢谢,
达留
答案 0 :(得分:1)
在Couchbase 2.0中,文档必须先写入磁盘,然后才能显示在视图中。使用Java SDK可以通过三种方式进行操作。第一个是异步,这意味着您只需发送数据,稍后再检查以确保数据已正确接收。如果执行异步操作然后立即调用.get(),则会创建同步操作。如果操作在上述两种情况下返回成功,则只能保证该项已写入内存。您的测试通过有时只是因为您很幸运,在查询之前两个项目都已写入磁盘。
执行操作的第三种方法是使用耐久性要求,这是您要为测试执行的操作。耐久性要求允许您说在将成功返回到客户端之前,您希望将项目写入磁盘或进行复制。看看以下功能。
您将需要使用此功能并将PersistedTo参数设置为MASTER。