2011-08-04 10 views
9

tagsという配列を含む文書があります。サイト上でタグベースの推奨事項を提供したいので、同じタグを含むドキュメント+ 1つのタグと一致しないドキュメント+ 2つのタグと一致しないドキュメントを取得する必要があります。MongoDB:タグで文書を入手

どうすればいいですか?それ?

+1

この質問の下であなたが言ったことは明らかではありません。おそらく望ましい出力の例が助けになるでしょう –

答えて

12

例コレクション:

db.tags.insert({"tags":["red", "tall", "cheap"]}); 
db.tags.insert({"tags":["blue", "tall", "expensive"]}); 
db.tags.insert({"tags":["blue", "little", "cheap"]}); 

すると、すべてのタグ付けされた "青" と "安い"

db.tags.find({ tags: { $all: ["cheap", "blue"] } }) 

はすべて "青" ではない見つける見つけるすべてのタグ付けされた "青"

db.tags.find({tags: "blue"}) 

を見つけます

db.tags.find({tags: { $ne: "blue" } }) 

すべて「青」と「安い」が「赤」で「高」ではない

私のmongo dbでは不可能です。このようなものにMongoDBの1.9.1からは動作するはずです、(テストしていない)にもかかわらず:

db.tags.find({ $and: [ {tags: { $all: ["blue", "cheap"] } }, { tags: { $nin: ["red", "tall"] } } ] }) 
+2

あなたは考えを得ていませんでした。私は完全に一致する必要はありません。タグのうちの少なくとも1つを含むすべてのドキュメントに、そのタグに含まれる元のタグの数で注文します。 – Daniel

+1

あなたはより正確に質問を定式化することに気を配りますか? – rompetroll

+0

私はそう思いました:( – Daniel

0

ステップ:

  1. 指定されたキーのいずれかが含まれている一致する商品を検索します。キー

  2. 展開]は、最も関連性の最初の

を取得するには、キー発生に

  • ソートDESCを追加することで、グループにそれら

  • を展開した後、不要なフィルタ処理するために、再び見つけますか

    {{"$ match":{"keys":{"$ in":{{"$ regex": "text"、 "$ options": "i"}}}}}、{"$ un {$ "{" $ "}"} "}}} {{{}}}}}}}} {"$ sort":{"relatedTags": - "関連するタグ"}:{"$ id":{"$ itemId" 1}}、{ "$リミット":10}]

  • 1

    言い換え質問です:

    の求人は今すぐ

    よう

    求人ポスティング

    [{_id : ObjectId(1249999493),tags : ['Location1', 'SkillSet1', 'SkillSet2', 'Someother1', 'Someother2']}, 
    {_id : ObjectId(1249999494),tags : ['Location3', 'SkillSet1', 'SkillSet0', 'Someother4', 'Someother3']}] 
    

    を取り付けた検索タグを持っている場合とし、彼はタグ['Location1'、 'SkillSet1'、 'SkillSet0']を持つレコードを希望します

    そして、クエリからより多くのキーワードを持つ選択されたドキュメントが最初に来るはずです。最後にキーワードの一致が少なくなるはずです。そのため、検索クエリに対してより適切な求人情報を得ることができます。

    私は賢明ですか、私は再フレーズする必要がありますか?

    +0

    それは私にはちょっと見えます。*** 4歳の質問***が検索パラメータを作成するよりもフィルタリングの結果についてもっと詳しく話していたようです。 – monsto

    +0

    これは答えではありません.. – nilsi

    +0

    @nilsiはいこれは答えではありませんが、私はシナリオで問題を説明しようとしました。 –

    関連する問題