我对长沙发视图/ 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

10-08 12:38