2017-01-26 2 views
1

다음과 같이 mongodb 문서가 있고 messageTopic, messageTopicQuestion 및 응답 필드에 텍스트 인덱스를 구성했습니다. 텍스트 문자열로 검색하면 전체 결과가 아닌 포함 된 일치하는 레코드 만 기대합니다. 문서.mongodb가 포함 된 레코드에서 검색

예를 들어 아래 문서에서 "private"이라는 단어로 검색하는 경우 결과는 첫 번째 포함 된 문서 만 반환해야하며 두 레코드는 반환하지 않아야합니다. 일치하는 포함 된 문서 만 검색하고 일치하지 않는 문서는 제외하는 방법

{ 
    "_id": ObjectId("586e8efdde81e56032000084"), 
"messageTopic": "My Private", 
"messageText": [{ 
    "messageTopicQuestion": "agent private", 
    "answer": "agent private", 
    "_id": ObjectId("586e8efdde81e56032000085"), 
    "keywords": ["private"] 
}, { 
    "messageTopicQuestion": "Greetings Checking", 
    "answer": "Heloo I am good What about u", 
    "_id": ObjectId("586fc80ccced739407000f4e"), 
    "keywords": ["Hi-Good", "Heloo"] 
}], 
"__v": 3 

}

나는

 db.getCollection('messagetemplates').aggregate([{ 
      $match: { 

       $text: {$search: 'private'}, 
       visible: 'PUB' 
      } 
     },{ $sort: { score: { $meta: "textScore" } } }]) 

하는 도움을 주셔서 감사합니다 스크립트 이하로 사용하고 있습니다. 감사.

답변

1

저는이 문제의 변형이라고 생각합니다. How to get a specific embedded document inside a MongoDB collection? 문제는 단일 임베디드 문서를 가져 와서 나머지를 제외하는 방법입니다. 내 제안은 집계 대신 db.collection.find()를 사용하는 것입니다. 그 의미의 무엇인가

 db.collection.find({ 'messageText.keyword': 'private' }, {'messageText.$': 1}); 

위의 대답에 표시된 것과 같습니다.

messageText.keyword은 검색 할 필드로 바꿀 수 있습니다.

시나리오가 내 데이터베이스에서 작동하는지 확인할 수 있습니다.