查询MongoDB中的类似数组

时间:2017-01-05 17:41:27

标签: arrays mongodb

我想在MongoDB集合中搜索具有相似数组的文档,并按相似度排序。

示例

我会搜索{chars:['a', 'b', 'c']}

我存储了这些文件:

1. {chars:['s', 'e', 'c']}
2. {chars:['i', 'l', 'd']}
3. {chars:['b', 'a', 'c']}
4. {chars:['f', 'c', 'b']}

我希望得到像ORDERED一样的东西:

[
  {chars:['b', 'a', 'c'], similarity: 1.0},
  {chars:['f', 'c', 'b'], similarity: 0.66},
    ...
]

我应该使用哪种运营商或查询策略来获得类似的内容?

谢谢!

1 个答案:

答案 0 :(得分:2)

感谢所有试图帮助我的人。感谢您的帮助。

我通过汇总管道找到了解决方案。

var myArray = ['a', 'b', 'c'];
db.test.aggregate([
{$unwind: "$chars"},
{$match: {chars:{ $in: myArray}}},
{$group: {_id: "$_id", count: {$sum: 1}}},
{$project: {_id: 1, count: 1, score: {$divide: ["$count", myArray.length]}}},
{$sort: {score: -1}}
]);

这是控制台回馈的内容:

{ "_id" : ObjectId("586ebeacb2ec9fc7fef5ce31"), "count" : 3, "score" : 1 }
{ "_id" : ObjectId("586ebeb9b2ec9fc7fef5ce32"), "count" : 2, "score" : 0.6666666666666666 }
{ "_id" : ObjectId("586ebe89b2ec9fc7fef5ce2f"), "count" : 1, "score" : 0.3333333333333333 }

希望有人觉得这很有用。