我对长沙发视图/ 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],一切都很好。
但是,如何使用多个过滤器创建视图?
例如-所有酒店:
带有3星和“家庭友好”和“宠物友好”标志,以及
与hotelType“预算”一起使用?
与酒店类型“高级”和食物“早餐”或“午餐”一起?
等等
有任何想法吗?
编辑:
我现在决定使用旧的mysql。 CouchDB对我来说是一个很好的体验,但是如果您只需要一个文档的数据,那么就会遇到很多问题:(
最佳答案
您可以发出带有一组值的键:
emit([[doc.stars,doc.hotelType], doc.name]);
问题在于,这仅在您可以按重要性对属性进行排序的情况下有效,因为它们总是会以相同的顺序进行缩减。 Kxepal使用不同视图的解决方案可能最适合您的情况。
资料来源:http://wiki.apache.org/couchdb/Introduction_to_CouchDB_views#Grouping