couchdb使用视图映射器获取变量键的值

时间:2014-07-21 16:39:22

标签: couchdb

我是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",但我处理的是我可能想要的情况不同的钥匙取决于具体情况。似乎应该有一个简单的方法来做到这一点,但我没有设法找到它。

2 个答案:

答案 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]);
  }
} 




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