通过动态传递一些值来查询couchbase

Yo *_*ngh 4 couchbase couchbase-view

我有以下格式存储的couchbase文档:

{
"userEmail": "satyam@xyz.com",
"hashedPassword": "$2a$12$MT31FHNEbOAKpQGzLdBB3uhLlPlGNU0cvsgi/2pt4TdwPjvrUzkSG",
"type": "user",
}
Run Code Online (Sandbox Code Playgroud)

我想只读取userEmail值为satyam@xyz.com的文档.为此我写了一个基础视图:

function (doc, meta) {
  if(doc.userEmail == "satyam@xyz.com")
      emit(doc.data, meta.id);
}
Run Code Online (Sandbox Code Playgroud)

现在我想要的是,我想从Java代码中传递值"satyam@xyz.com".我尝试了很多,但找不到合适的解决方案.任何人都可以帮助我摆脱这种困境.

提前感谢任何建议.

Sim*_*slé 7

我想事实上你想用userEmail映射你的JSON文档,所以你的map函数应该是这样的:

function(doc, meta) {
    //maybe check the type of the document here, see meta.type
    emit(doc.userEmail, null)
}
Run Code Online (Sandbox Code Playgroud)

两个笔记:

  • 如果您的存储桶中同时包含json和非json文档,则只能通过检查来映射json文档meta.type == "json".
  • 结果索引将始终具有文档的ID,因为它不必要地增加索引大小,所以不需要发出它(或整个文档).

现在,您可以通过传递startkeyendkey参数查询视图,只需一点技巧:

?startkey="theEmail"&endkey="theEmail\uefff"
Run Code Online (Sandbox Code Playgroud)

\uefff是第一个unicode char,它允许模拟精确的密钥匹配,因为"myEmail"和"myEmail\uefff"之间没有其他字符组合.