我正在使用以下格式存储的couchbase文档:
{
"userEmail": "satyam@xyz.com",
"hashedPassword": "$2a$12$MT31FHNEbOAKpQGzLdBB3uhLlPlGNU0cvsgi/2pt4TdwPjvrUzkSG",
"type": "user",
}
我只想阅读 userEmail 值为 satyam@xyz.com 的文档。为此我写了一个沙发基地视图:
function (doc, meta) {
if(doc.userEmail == "satyam@xyz.com")
emit(doc.data, meta.id);
}
现在我想要的是,我想传递价值" satyam@xyz.com"来自Java代码。我尝试了很多,但无法找到合适的解决方案。任何人都可以帮助我摆脱这种困境。
提前感谢任何建议。
答案 0 :(得分:7)
我认为你实际上想要通过userEmail映射你的JSON文档,所以你的map函数应该是这样的:
function(doc, meta) {
//maybe check the type of the document here, see meta.type
emit(doc.userEmail, null)
}
两个注释:
meta.type == "json"
即可映射json文档。现在您可以通过传递startkey
和endkey
参数来查询视图,只需一点技巧:
?startkey="theEmail"&endkey="theEmail\uefff"
这里\uefff
是第一个unicode char,它允许模拟精确的密钥匹配,因为" myEmail"之间没有其他字符组合。和" myEmail \ uefff"。
答案 1 :(得分:3)
这是给你的问题。如果你有电子邮件地址和电子邮件地址是唯一的,或者你可以使用像userID这样的东西,那为什么不把它作为对象的关键?那你根本就没有视野。您的应用知道它需要什么,并按键获取对象。与使用视图相比,这总是更快更好。需要考虑的事情。
在Couchbase中,你有两个256字节(iirc)的密钥,所以让密钥对你的应用程序有意义并且可能不考虑那个视图?