【问题标题】:MongoDB: How to get documents according to the number of matched valuesMongoDB:如何根据匹配值的数量获取文档
【发布时间】:2018-07-14 00:31:34
【问题描述】:

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

我有 100 个包含“爱好”字段的文档。 所有文件都有像我们人一样具有不同价值观的爱好。

例如

第一个文档:{"爱好":"素描、唱歌、跳舞、阅读、木工"}

第二份文档:{"hobbies":"riding, reading"}

第三份文件:{"hobbies":"reading, woodworking"}

等等……

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

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

查询应该是什么?

我对 Java 也很熟悉,因此您也可以将 java 与 MongoDB 一起使用。

提前致谢。

【问题讨论】:

  • 爱好是一个以逗号分隔值的字段还是一个集合?
  • @Saravana 。是的,值用逗号分隔。

标签: java mongodb


【解决方案1】:

一种可能的方法是使用 MongoDB 的 text index

要获得您的需求中描述的内容,请使用以下内容:

  • 创建文本索引hobbies 键为:db.people.ensureIndex({hobbies:"text"})
  • 执行搜索:使用 $search 和 $text 运算符,使用 sort by text search scrore as

    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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 2018-10-08
    • 2020-06-07
    • 2018-10-23
    相关资源
    最近更新 更多