如何根据 MongoDB 中的匹配值数量获取文档?
我有100份文件,其中包括“爱好”和“爱好”。 所有文件都有不同价值的爱好,就像我们人一样。
例如
第一份文件:{"爱好":"草绘,唱歌,跳舞,阅读,木工"}
第二份文件:{"爱好":"骑马,阅读"}
第3号文件:{"爱好":"阅读,木工"}
等...
假设,我已经为同一个字段'爱好传递了3个值(阅读,唱歌,木工),所以作为输出,我应该首先获得匹配所有3个值的文档,然后匹配2个值的文档,然后匹配1个值的文档。
如何对任意数量的值执行相同操作?
查询应该是什么?
我也很熟悉 Java ,所以你也可以将java用于 MongoDB 。
提前致谢。
答案 0 :(得分:0)
一种可能的方法是使用MongoDB的text index
要获得您的要求中描述的内容,请使用以下内容:
hobbies
密钥上:db.people.ensureIndex({hobbies:"text"})
执行搜索:使用sort by text search scrore as使用$ search和$ text运算符:
db.people.find({$text:{$search: "reading, singing, woodworking"}},{ score: { $meta: "textScore" } }).sort( { score: { $meta: "textScore" } } )
这将按相关性递减顺序返回文档:
{
"_id" : ObjectId("5a7606a692a0280a17c67ead"),
"hobbies" : "sketching, singing, dancing, reading, woodworking",
"score" : 1.7999999999999998
}
{
"_id" : ObjectId("5a7606bf92a0280a17c67eaf"),
"hobbies" : "reading, woodworking",
"score" : 1.5
}
{
"_id" : ObjectId("5a7606b392a0280a17c67eae"),
"hobbies" : "riding, reading",
"score" : 0.75
}