鉴于以下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'
]
},
...
Run Code Online (Sandbox Code Playgroud)
如何检索匹配标签列表的项目列表,按匹配标签的总数排序?例如,给定此标记列表作为输入:
['shirt', 'cotton', 'black']
Run Code Online (Sandbox Code Playgroud)
我想通过匹配标签的总数检索按desc顺序排列的项目:
item total matches
-------- --------------
Shirt One 3 (matched shirt + cotton + black)
Shirt Three 2 (matched shirt + cotton)
Shirt Two 1 (matched shirt)
Run Code Online (Sandbox Code Playgroud)
在关系模式中,标记将是一个单独的表,您可以加入该表,计算匹配,并按计数排序.
但是,在Mongo ......?
似乎这种方法可行,
可以说我的测试数据是
db.multiArr.insert({"ID" : "fruit1","Keys" : ["apple", "orange", "banana"]})
db.multiArr.insert({"ID" : "fruit2","Keys" : ["apple", "carrot", "banana"]})
Run Code Online (Sandbox Code Playgroud)
得到像胡萝卜一样的水果
db.multiArr.find({'Keys':{$in:['carrot']}})
Run Code Online (Sandbox Code Playgroud)
当我做一个或查询橙色和香蕉时,我同时看到了水果1和水果2的记录
db.multiArr.find({ $or: [{'Keys':{$in:['carrot']}}, {'Keys':{$in:['banana']}}]})
Run Code Online (Sandbox Code Playgroud)
输出的结果应该是fruit2,然后是fruit1,因为fruit2既有胡萝卜又有香蕉