我在MongoDB中擁有一個具有複雜結構和子文檔的集合。 文檔有一個結構是這樣的:MongoDB查找子文檔並對結果進行排序
doc1 = {
'_id': '12345678',
'url': "http//myurl/...",
'nlp':{
"status": "OK",
"entities": {
"0": {
"type" : "Person",
"relevance": "0.877245",
"text" : "Neelie Kroes"
},
"1": {
"type": "Company",
"relevance": "0.36242",
"text": "ICANN"
},
"2": {
"type": "Company",
"relevance": "0.265175",
"text": "IANA"
}
}
}
}
doc2 = {
'_id': '987456321',
'url': "http//myurl2/...",
'nlp':{
"status": "OK",
"entities": {
"0": {
"type": "Company",
"relevance": "0.96",
"text": "ICANN"
},
"1": {
"type" : "Person",
"relevance": "0.36242",
"text" : "Neelie Kroes"
},
"2": {
"type": "Company",
"relevance": "0.265175",
"text": "IANA"
}
}
}
}
我的任務是「相關性」搜索「類型」和「文本」的子文檔中,然後進行排序。 隨着$ elemMatch操作我能夠執行查詢:
db.resource.find({
'nlp.entities': {
'$elemMatch': {'text': 'Neelie Kroes', 'type': 'Person'}
}
});
完美,現在我已經通過相關下降到所有類型「人」和值「尼利·克羅斯」的實體記錄進行排序。
我嘗試了一個正常的「排序」,但是,作爲關於$ elemMatch中的sort()的manual said,結果可能不會反映排序順序,因爲sort()是在數組之前應用於數組的元素$ elemMatch投影。
事實上,_id:987456321將是第一個(相關度爲0.96,但提及ICANN)。
我該怎麼辦,通過匹配的子文檔的相關性對我的文檔進行排序?
P.S .:我無法更改文檔結構。
這是作爲一個工具的轉儲出來,或者這是你的文件在mongo shell中的實際外觀?我這樣說是因爲你如何表示「實體」是作爲「子文檔」而不是數組。這些不能通過任何標準手段進行分類。 –