2012-04-29 10 views
3

MongoDBを使用してコーヒーに関する情報を保存していますが、クエリに問題があります。MongoDBのクエリの種類を混ぜる

マイドキュメント構造は次のとおりです。

{ _id: "Thailand Bok", tags: ["Strong", "Smooth", "Dark"] } 

私は私が名前やタグのいずれかを検索することができますクエリを作成しようとしています。

クエリ文字列が "Thailand Bok"または["Strong"、 "Smooth"]の場合、_idタグまたは各タグを含むリクエストを検索したいとします。

私はSQLの用語で考えていたならば、それはこのようなものになることがあります。

"WHERE `_id` like 'Not present%' OR ("Strong" IN `tags` AND "Smooth" IN `tags`)" 

私がこれまで持っているクエリは次のとおりです。

{ 
    $or: [ 
     { _id: { $regex: '^Not present', '$options': 'i' } }, 
     { 
      $and: [ 
       { tags: 'Strong' }, 
       { tags: 'Smooth' } 
      ] 
     } 
    ] 
} 

編集:クエリ内の誤りを訂正し、明確化_idが一致するかタグが一致するかのどちらかで動作するはずです

+0

どのようにあなたのために行くのですか? '$と'の周りに '' 'が必要ですか? – mindandmedia

答えて

7

$ MongoDB 2.0以降でのみサポートされています。1.8.2

5

$またはで角かっこの代わりに中かっこを使用していることを除いて、照会はすべて正しいようです。

{$or: [ 
    {_id: {$regex: '^hailand', $options: 'i'} }, 
    {'$and': [ 
     {tags: 'Strong'}, 
     {tags: 'Smooth'} 
    ]} 
]} 

うまく動作します。

+0

申し訳ありません、コピーミスです。私はあなたのクエリを試して、それは私の問題を強調表示します。私があなたのものを直接コピーすると、私は検索結果を得ません。しかし、私が^タイを使うと、私は検索結果を得る。 私が到達しようとしている成果は、あなたが名前またはタグに一致することができるということです。 –

+0

これは奇妙です。なぜなら、このクエリを実行すると、結果が得られるからです。 --- > db.items.find({$ or:{$ regex: '^ hailand'、$ options: 'i --- {"_id": "Thailand Bok"、 "tags": "}}、{'$と':{{tags: '強'}、{tags: 'スムーズ'}}}} – daeq

+0

...ああ、私はばかだと答えています:) $ 2.0でのみ有効です+ 1.8.2を使用しています。ごめんなさい。 –