我正在研究写查询的要求,如果用户输入大学的首字母缩写(例如: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
查询未返回预期的订单。
任何指针都会有所帮助。
答案 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/