2017-01-26 11 views
1

私たちは以下のようなmongodbドキュメントを持っています。私はテキスト文字列で検索するとmessageTopic、messageTopicQuestion、answerフィールドにテキストインデックスを設定しました。資料。mongodb埋め込みレコードで検索

たとえば、以下のドキュメントで「私」という単語を検索すると、結果は両方のレコードではなく最初の埋め込みドキュメントのみを返します。一致した埋め込みドキュメントのみを取得し、不一致のドキュメントを除外する方法。私は、スクリプト

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

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

の下に使用しています

{ 
    "_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 

}

助けに感謝。ありがとう。

答えて

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は、検索するフィールドに置き換えることができます。

シナリオが自分のデータベースで機能することを確認できます。

関連する問題