我想在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},
...
]
我应该使用哪种运营商或查询策略来获得类似的内容?
谢谢!的
答案 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 }
希望有人觉得这很有用。