MongoDB:如何根据匹配值的数量获取文档

时间:2018-02-03 18:44:02

标签: java mongodb

如何根据 MongoDB 中的匹配值数量获取文档?

我有100份文件,其中包括“爱好”和“爱好”。 所有文件都有不同价值的爱好,就像我们人一样。

例如

第一份文件:{"爱好":"草绘,唱歌,跳舞,阅读,木工"}

第二份文件:{"爱好":"骑马,阅读"}

第3号文件:{"爱好":"阅读,木工"}

等...

假设,我已经为同一个字段'爱好传递了3个值(阅读,唱歌,木工),所以作为输出,我应该首先获得匹配所有3个值的文档,然后匹配2个值的文档,然后匹配1个值的文档。

如何对任意数量的值执行相同操作?

查询应该是什么?

我也很熟悉 Java ,所以你也可以将java用于 MongoDB

提前致谢。

1 个答案:

答案 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
}