2011-11-16 10 views
66

このようなレコードがある場合は、mongodb複数の配列アイテムで検索する

{ 
    "text": "text goes here", 
    "words": ["text", "goes", "here"] 
} 

MongoDBで複数の単語をどのように一致させることができますか?私はこれを行うことができます単一の単語を一致させるとき。

db.find({ words: "text" }) 

しかし、これを複数の単語で試しても機能しません。

db.find({ words: ["text", "here"] }) 

Iは、配列を使用することによって、それはむしろ、個々のコンテンツに合致するよりも、レコードの一方に対して配列全体を一致させようと推測しています。

答えて

112

あなたはwords$allを使用して、両方の要素(texthere)が含まれているドキュメントを検索しようとしているかどうかによって異なります。

db.things.find({ words: { $all: ["text", "here"] }}); 

またはそれらのいずれか(textまたはhere$inを使用して:

db.things.find({ words: { $in: ["text", "here"] }}); 
+3

$が私が探していたものでした。ありがとうございました。 :) –

+3

これも助けてくれました。配列内のオブジェクトIDを見つけるのに必要でしたが、$ in:[ObjectId( "4f9f2c336b810d0cf0000017")]が失敗しました。$ [in: "4f9f2c336b810d0cf0000017"]は – jbnunn

+0

mangodbのサポートページhttp://docs.mongodb.org/manual/core/indexes/#indexes-on-sub-documentsとhttp://docs.mongodb.org/manual/core/indexesでこれを行う別の方法を見つける/#multikey-indexes –

関連する問題