给定以下 MongoDB 文档集合:
{
title : 'shirt one'
tags : [
'shirt',
'cotton',
't-shirt',
'black'
]
},
{
title : 'shirt two'
tags : [
'shirt',
'white',
'button down collar'
]
},
{
title : 'shirt three'
tags : [
'shirt',
'cotton',
'red'
]
},
...
如何检索与标签列表匹配的项目列表,按匹配标签的总数排序?例如,给定这个标签列表作为输入:
['shirt', 'cotton', 'black']
我想检索按匹配标签总数按降序排列的项目:
item total matches
-------- --------------
Shirt One 3 (matched shirt + cotton + black)
Shirt Three 2 (matched shirt + cotton)
Shirt Two 1 (matched shirt)
在关系模式中,标签将是一个单独的表,您可以连接该表,计算匹配项,并按计数排序。
但是,在蒙古...?
似乎这种方法可以工作,
- 将输入标签分成多个“IN”语句
- 通过将标签输入“或”在一起来查询项目
- 即 where ('shirt' IN items.tags ) OR ('cotton' IN items.tags )
- 例如,这将返回三个“衬衫一号”实例、两个“衬衫三号”实例等
- 映射/减少该输出
- 地图:发射(this._id,{...});
- 减少:计算_id的总出现次数
- finalize:按总数排序
但是我不清楚如何将其作为 Mongo 查询来实现,或者这是否是最有效的方法。