【发布时间】:2017-02-09 15:50:39
【问题描述】:
我们正在尝试创建对 MangoDB 的调用以接收所有可能的产品过滤器。
我将尝试创建我们产品的示例
第一个产品是阿迪达斯鞋,它有两种选择 - 颜色和尺码。但是对于不同的颜色,您有不同的尺寸。
{
id: 1
name: "Adidas Shoes",
filters: [
[
{
code: "brand",
value: "Adidas"
},
{
code: "colour",
value: "white"
},
{
code: "size",
value: 41
}
],
[
{
code: "brand",
value: "Adidas"
},
{
code: "colour",
value: "white"
},
{
code: "size",
value: 42
}
],
[
{
code: "brand",
value: "Adidas"
},
{
code: "colour",
value: "white"
},
{
code: "size",
value: 43
}
],
[
{
code: "brand",
value: "Adidas"
},
{
code: "colour",
value: "blue"
},
{
code: "size",
value: 41
}
],
[
{
code: "brand",
value: "Adidas"
},
{
code: "colour",
value: "blue"
},
{
code: "size",
value: 44
}
]
]
}
第二个产品是耐克鞋。
{
id: 2
name: "Nike Shoes",
filters: [
[
{
code: "brand",
value: "Nike",
},
{
code: "colour",
value: "white",
},
{
code: "size",
value: 41,
}
],
[
{
code: "brand",
value: "Nike",
},
{
code: "colour",
value: "white",
},
{
code: "size",
value: 42,
}
],
[
{
code: "brand",
value: "Nike",
},
{
code: "colour",
value: "green",
},
{
code: "size",
value: 41,
}
]
]
}
还有 Reebook 鞋
{
id: 3
name: "Reebook Shoes",
filters: [
[
{
code: "brand",
value: "Reebook",
},
{
code: "colour",
value: "black",
},
{
code: "size",
value: 41,
}
]
]
}
如您所见,选项大小取决于颜色,颜色取决于大小。
我们如何创建 MongoDb.aggregate 以拥有所有可能的过滤器?
品牌:阿迪达斯 (1)、耐克 (1)、Reebook (1)
尺寸: 41 (3), 42 (2), 43 (1), 44 (1)
颜色:白色 (2)、蓝色 (1)、绿色 (1)、黑色 (1)
调用应该与我们拥有的过滤器数量和过滤器无关(具有一个选项的产品、具有更多选项和不同过滤器的产品)。你能解释一下在这种情况下如何使用 $group, $unwind 吗?以及我们以后如何使用 $facet 改进它?
非常感谢!!!
编辑 02/10/2017
示例响应
facets: [
{
code: "brand",
values: [
{
name: "Adidas",
count: 1
},
{
name: "Nike",
count: 1
},
{
name: "Reebook",
count: 1
}
]
},
{
code: "size",
values: [
{
name: 41,
count: 3
},
{
name: 42,
count: 2
},
{
name: 43,
count: 1
},
{
name: 44,
count: 1
}
]
},
{
code: "colour",
values: [
{
name: "White",
count: 2
},
{
name: "Blue",
count: 1
},
{
name: "Green",
count: 1
},
{
name: "Black",
count: 1
}
]
}
]
或
facets: {
"brand": {
"Adidas": 1,
"Nike":1,
"Reebook":1
},
"size": {
"41": 3,
"42":2,
"43":1,
"44":1
},
"colour": {
"White": 2,
"Blue":1,
"Green":1,
"Black":1
}
}
这是我们的第一阶段。下一步将是当我选择尺寸:41 和颜色:白色时如何搜索可能的过滤器。
谢谢
【问题讨论】:
-
您能否展示您想要获得的示例响应?我试图了解颜色和大小之间的依赖关系将如何影响响应以及它的外观。
-
@AntonioNarkevich 我添加了对原始响应的示例
标签: mongodb aggregation-framework faceted-search