如何根据给定的条件提高Mongodb搜索结果

时间:2019-09-03 11:57:05

标签: mongodb nosql

我正在研究写查询的要求,如果用户输入大学的首字母缩写(例如:MIT),则必须从数据库中获取结果。 JSON看起来像这样:

{
    "_id" : ObjectId("5d68cdcac8acd826e6a386b2"),
    "name" : "Massachusetts Institute of Technology",
    "acronyms" : [ 
        "MIT"
    ]
}
,
{
    "_id" : ObjectId("5d68ce0bc8acd826e6a45b29"),
    "name" : "Manukau Institute of Technology",
    "acronyms" : [ 
        "MIT"
    ]
}

用户也可以输入“名称”。我已经为此写了“ OR”查询。

db.getCollection('universityCollection').find(
    {$or: [{"name":"MIT"},{"acronyms":"MIT"}]}
)

现在我的要求是,如果用户输入“ input”,并且如果它与acronym匹配,则应先返回它,然后它会返回与name匹配的项目。

当前or查询未返回预期的订单。

任何指针都会有所帮助。

1 个答案:

答案 0 :(得分:0)

Please try below query.

db.getCollection('test').aggregate(
     { $match : { $or :  [{ "name":"MIT" }, {"acronyms":"MIT" } ] } } 
     ,{ "$project": {
        "name": 1,
        "acronyms": 1,
        "sortOrder": {
            "$setIsSubset": [  ["MIT" ] , "$acronyms" ] }
        }
    } 
    ,{ "$sort": { "sortOrder": -1 } }
)

如果您不熟悉MongoDB聚合,请检查以下链接。 https://docs.mongodb.com/manual/reference/method/db.collection.aggregate/ https://docs.mongodb.com/manual/reference/operator/aggregation/setIsSubset/