我对couchdb views / map-reduce有疑问。
假设我们有一个包含酒店文件的数据库,如下所示:
[{
_id: "1",
name: "Hotel A",
type: "hotel",
stars: 3,
flags: ["family-friendly","green-hotel","sport"],
hotelType: "premium",
food: ["breakfast","lunch"]
}, {
_id: "2",
name: "Hotel B",
type: "hotel",
stars: 5,
flags: ["family-friendly","pet-friendly"],
hotelType: "budget",
food: ["breakfast","lunch","dinner"]
}]
要查找所有3星级酒店,以下视图将适用:
function(doc) {
emit([doc.stars, doc.name]);
}
如果我使用startkey = [3],一切都很好。
但是如何使用多个过滤器制作视图呢?
例如 - 所有酒店:
有什么想法吗?
编辑: 我现在决定使用好的旧mysql。 CouchDB对我来说是一次很好的体验,但是如果你需要更多的文档数据,那就太多问题了:(
答案 0 :(得分:1)
您需要使用不同的视图。每个视图都将使用自己的密钥处理自己的域。您可以通过具有不同key
值的多个发射创建一个视图换所有数据,但从视角来看,它很难维护。
答案 1 :(得分:1)
您可以使用一组值发出密钥:
emit([[doc.stars,doc.hotelType], doc.name]);
问题是,这只有在您按重要性排序属性时才有效,因为它们总是以相同的顺序减少。 Kxepal使用不同视图的解决方案可能是您的最佳选择。
来源:http://wiki.apache.org/couchdb/Introduction_to_CouchDB_views#Grouping
答案 2 :(得分:0)
CouchDB视图是一维的。而且您正在寻找多维查询:
不幸的是,不支持多维查询。例如,如果您需要按纬度和经度查询地理位置,那么您必须使用GeoCouch。