我是CouchDB的新用户,并尝试使用官方文档来回答我的问题,但到目前为止还没有找到执行应该是简单操作的方法。
我知道可以从文档" doc"中获取已知密钥的价值,比如说" tacos"通过" doc.tacos"。我需要在视图映射器中访问变量键的值。我正在寻找像
这样的代码解决方案"get-key-value": {
"map": "function(doc) { var key; \** get key id **\ emit(key,doc.getValue(key)); }"
}
我需要弄清楚如何执行" doc.getValue(key)"这个查询的一部分。如果我知道关键变量总是" tacos",那么我可以使用" doc.tacos",但我处理的是我可能想要的情况不同的钥匙取决于具体情况。似乎应该有一个简单的方法来做到这一点,但我没有设法找到它。
答案 0 :(得分:0)
不幸的是,这是不可能的。视图函数只能访问单个文档的值。 show功能正常吗?您可以传入变量以通过req
参数显示和访问它。
修改
好的,我明白你的意思了。我没有任何可以帮助您找到解决方案的内容,但我有几点要说。我希望它对你有所帮助。
创建couchdb视图时,可以为数据创建查询机制。这种机制非常具体。例如: -
function(doc){
emit(doc.time,null);
}
上面的map函数创建了一个视图,该视图对按key
时间排序的数据编制索引。您事先知道 ,您将通过time
值查询此视图。这是所有couchdb视图的工作方式。所以我想说的是,即使你设法找到一种方法来获得你的密钥的价值,你会如何查询它?
举个例子:
“get-key-value”:{ “map”:“function(doc){var key; ** get key id ** \ emit(key,doc.getValue(key));}” }
假设此密钥为= doc.name
,您可以找到执行getValue()
函数的方法。这个观点对你有什么用?当你查询它
/get-key-value?key=
你在关键参数中放了什么?
现在我假设你的文件很灵活。一个文档可能包含一个字段,另一个文档可能没有该字段,并且您只想索引包含某个字段的那些文档。最简单的方法是使用if
语句。
“get-key-value”:{ “map”:“function(doc){var key; ** get key id ** \ if(key)emit(key,doc.getValue(key));}” }
这种方式get-key-value view
只会在特定密钥存在时发出,因此只会索引包含该密钥的文档。
答案 1 :(得分:0)
你在程序上思考。 CDB的设计具有不同的思维模式 - 一种牺牲视图大小以实现读取性能的思维模式。您向视图发出所有键,然后在查询时可以找到您想要的任何键(提前警告伪代码):
function(doc){
for (var fieldName in doc){
emit(fieldName, doc[fieldName]);
}
}

现在,当您访问给定密钥(以及可选值)的视图时,您将获得携带该密钥的所有文档。您可能必须根据某些外部逻辑过滤它们才能找到感兴趣的子集?