Map CouchDB视图-多过滤器
我有一个关于couchdb视图/地图缩减的问题 比如说,我们有一个包含以下酒店文档的数据库:Map CouchDB视图-多过滤器,map,mapreduce,couchdb,Map,Mapreduce,Couchdb,我有一个关于couchdb视图/地图缩减的问题 比如说,我们有一个包含以下酒店文档的数据库: [{ _id: "1", name: "Hotel A", type: "hotel", stars: 3, flags: ["family-friendly","green-hotel","sport"], hotelType: "premium", food: ["breakfast","
[{
_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"]
}]
要查找所有三星级酒店,请查看以下视图:
function(doc) {
emit([doc.stars, doc.name]);
}
如果我使用startkey=[3],一切都很好
但是,如何使用多个过滤器创建视图呢
例如,所有酒店:
- 三颗星和国旗“家庭友好型”和“宠物友好型”以及 使用hotelType“预算”
- 酒店类型“高级”和食物“早餐”或“午餐”
- 等等
我现在决定使用好的老mysql。CouchDB对我来说是一次很好的体验,但是如果您需要的不仅仅是一个文档的数据,那么会有太多的问题:(您需要为此使用不同的视图。每个视图将使用自己的键处理自己的域。您可以使用不同的
键值通过多个emit为所有数据创建一个视图,但在透视图中很难维护。您可以使用一组值来发射一个键:
emit([[doc.stars,doc.hotelType], doc.name]);
问题是,只有当您可以按重要性对属性排序时,这才有效,因为它们总是以相同的顺序减少。Kxepal使用不同视图的解决方案可能最适合您的情况
来源:CouchDB视图是一维的。您正在寻找多维查询:
- x=星星
- y=标志
- z=酒店类型
遗憾的是,多维查询不受支持。例如,如果您需要按纬度和经度查询地理位置,则必须使用GeoCoach。感谢您的反馈。我知道我可以多次发射,并且可以使用数组作为键。函数(doc){//按名称发射([1,doc.name]);//按hotelType emit([2,doc.hotelType]);//按(doc.flags中的变量i){emit([3,doc.flags[i]]);}//按星和一个(doc.flags中的变量i){emit([4,doc.doc.flags[i]]);}的标志,但如何搜索例如“按星和多个标志”有什么解决方案吗?谢谢你的反馈。但是有没有解决我的问题的方法?不要使用CouCHDB?使用列表函数等等。你需要考虑这个任务的SQL数据库。或者你需要SQL,这样你就可以独立地比较两个值,或者你需要为你的搜索查询的每一个组合创建一个视图。CouchDB是这样设计的,因此它可以扩展。