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"
}
}
}
}
내 작업 "관련성"에 의해 다음 정렬 "유형"과 하위 문서 내부의 "텍스트"를 검색하는 것입니다. 지금은 관련성이 내림차순으로 유형 "사람"과 가치 "닐리 크로스 '의 실체와 모든 레코드를 정렬해야
db.resource.find({
'nlp.entities': {
'$elemMatch': {'text': 'Neelie Kroes', 'type': 'Person'}
}
});
완벽한 다음 $ elemMatch 연산자와 나는 쿼리를 수행 할 수 있어요.
정상적인 "정렬"을 시도했지만 $ elemMatch의 sort()에 대한 manual said으로 sort()가 배열 요소에 적용 되었기 때문에 결과에 정렬 순서가 반영되지 않을 수 있습니다. $ elemMatch 투영.
실제로 _id : 987456321이 첫 번째로 (관련도는 0.96이지만 ICANN은 참조됩니다.)
일치하는 하위 문서의 관련성에 따라 내 문서를 정렬하려면 어떻게해야합니까?
P .: 문서 구조를 변경할 수 없습니다.
일부 도구에서 덤프가 나오거나 문서가 실제로 mongo 셸에서 어떻게 보이나요? 왜냐하면 당신이 "엔티티"를 표현하는 방식이 배열이 아닌 "서브 문서"이기 때문입니다. 그것들은 어떤 표준 수단으로도 분류 될 수 없습니다. –