0
這可能聽起來像是一個簡單的問題,但我已花費超過3小時來實現它,但我陷入了中途。如何在MongoDb中爲搜索到的文檔分配權重?
輸入:
- 關鍵字列表的標籤
- 列表
問題陳述:我需要找到所有從數據庫中滿足以下條件的文件:
- 列出具有1個或多個匹配關鍵字的文檔。 (達到)
- 列出具有1個或多個匹配標籤的文檔。 (達到)
- 根據權重對查找到的文檔進行排序:每個關鍵字匹配攜帶2個點,每個標籤匹配攜帶1個點。
查詢:我如何達到要求#3。
我的嘗試:在我的嘗試中,我只能根據關鍵字匹配(也沒有將權重乘以2)列出。
標籤是文件的數組。每個標籤的結構是這樣
{
"id" : "ICC",
"some Other Key" : "some Other value"
}
關鍵字字符串數組:
["women", "cricket"]
查詢:
var predicate = [
{
"$match": {
"$or": [
{
"keywords" : {
"$in" : ["cricket", "women"]
}
},
{
"tags.id" : {
"$in" : ["ICC"]
}
}
]
}
},
{
"$project": {
"title":1,
"_id": 0,
"keywords": 1,
"weight" : {
"$size": {
"$setIntersection" : [
"$keywords" , ["cricket","women"]
]
}
},
"tags.id": 1
}
},
{
"$sort": {
"weight": -1
}
}
];
好主意在這裏使用'$ map' - 但我認爲你的查詢有一些包圍問題。 –
這對我有用。謝謝@Blakes – guptakvgaurav
卓越執行!值得注意的是,這種方法應該相當快。 –