【问题标题】:MongoDB - Sort results by number of matched fieldsMongoDB - 按匹配字段数对结果进行排序
【发布时间】:2013-03-16 21:05:55
【问题描述】:

假设我有一个只有名字和姓氏字段的非常简单的集合,并且我正在使用以下查询进行搜索:

{"$or:[{"firstName":"John"},{"lastName":"Smith"}]}

如何对结果进行排序,以便获得先匹配 John 和 Smith,然后匹配 John 或仅匹配 Smith 的文件?我需要为此使用聚合吗?

谢谢。

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    好吧,我认为您需要使用聚合。我会使用这样的查询:

    db.yourcollection.aggregate([
    
        /* Match documents with firstName == "John" OR lastName == "Smith" */
        {
            $match:{
                $or:[
                    {firstName:"John"},
                    {lastName:"Smith"}
                ]
            }
        },
    
        /* Project data creating a new field named "good".
           With the comparisons good will be true if
           firstName == "John" AND lastName == "Smith" */
        {
            $project:{
                _id:1,
                firstName:1,
                lastName:1,
                good:{
                    $and:[
                        {$eq:["$firstName","John"]},
                        {$eq:["$lastName","Smith"]}
                    ]
                }
            }
        },
    
        /* Sort by "good", descending, so true values come first */
        {$sort:{good:-1}}
    ])
    

    【讨论】:

      【解决方案2】:

      虽然 v2.4 中的 text indexes 仍然是一个实验性功能,但我相信它会给你想要的。

      如果您创建的文本索引对firstNamelastName 的权重相同,则查询结果将按分数降序排列,最高分数匹配两个字段。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多