相关疑难解决方法(0)

获取列表中带有标签的文档,按匹配总数排序

鉴于以下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 ......?

似乎这种方法可行,

  • 将输入标记分成多个"IN"语句 …

mongodb aggregation-framework

8
推荐指数
2
解决办法
3323
查看次数

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既有胡萝卜又有香蕉

mongodb mongodb-query aggregation-framework

2
推荐指数
1
解决办法
908
查看次数