我在CouchDB中有一个示例数据库,其中包含多个飞机的信息,以及一个显示制造商为关键字和模型作为值的视图。CouchDB减少错误?
地图功能是
function(doc) {
emit(doc["Manufacturer"], doc._id)
}
和减少功能
function(keys, values, rereduce){
return values.length;
}
这是非常简单的。我确实得到正确的结果,当我用被褥,在那里我有26架飞机波音的显示视图:
但是,如果使用REST客户端查询使用
http://localhost:6060/aircrafts/_design/basic/_view/VendorProducts?key="BOEING"
我的看法得到
{"rows":[
{"key":null,"value":2}
]}
我测试了不同的客户端(包括Web浏览器,REST客户端扩展和卷曲),所有给我的价值2!而使用其他键的查询正常工作。
MapReduce函数或查询有问题吗?
谢谢!这确实是我需要的。我对CouchDB相当陌生,有些事情我没有注意。而使用'group = true'也解决了'null'键的问题,在这种情况下,虽然值是正确的,但键总是'null'。但是现在我想知道,为什么我们需要'group'和'reduce'两个参数?在这种情况下只有'reduce'有用? –
区别在于,对于每组唯一键,“group”和“group_level”运行减少,其中reduce将结果减少为单个值。所以如果你有另一个像'ACME'的制造商,上面的查询将返回一个结果'BOEING:26,ACME:1',其中reduce将返回'27'。因此,像运行多个分组一样减少键。 [更多关于wiki](http://wiki.apache.org/couchdb/Introduction_to_CouchDB_views#Grouping)。顺便说一句,我希望你享受couchdb :) –
再次感谢!我尝试了使用和不使用“组”的东西,我现在认为我对它有更多的了解。但是,当密钥包含“BOEING”和“group = false”时,我仍然得到一个奇怪的结果,它总是2,而其他结果是正确的。当'group = true'时,结果也是正确的。也许我的文档有问题?顺便说一下,我使用的是CouchDB 1.5,它可能是一个已经在1.6中修复的bug吗? (由于一些未知的原因,我没有成功地让我的Windows 7工作1.6)。我喜欢CouchDB,我想深入其中! –