$all$all演算子は、フィールドの値が指定されたすべての値と一致するドキュメントを選択します。一致するドキュメントには、指定されたすべての要素を含む配列である値を持つフィールド、または指定された要素に一致する単一の値を持つフィールドが含まれます。
互換性
次の環境でホストされる配置には $all を使用できます。
MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
構文
$all式を指定するには、次のプロトタイプを使用します。
{ <field>: { $all: [ <value1> , <value2> ... ] } }
動作
$and 操作と同等
$all$andは、指定された値の 操作と同等です。例、次の 2 つのクエリは同等です。
{ tags: { $all: [ "ssl" , "security" ] } } { $and: [ { tags: "ssl" }, { tags: "security" } ] }
ネストされた配列
ネストされた配列の配列が渡された場合(例: [ [ "A" ] ] )、 $allは、 フィールドが要素としてネストされた配列を含むドキュメント(例: field: [ [ "A" ], ... ] )、またはフィールドはネストされた配列と等しい(例: field: [ "A" ] )。
たとえば、次のクエリを考えてみましょう。
db.articles.find( { tags: { $all: [ [ "ssl", "security" ] ] } } )
このクエリは下記と同等です。
db.articles.find( { $and: [ { tags: [ "ssl", "security" ] } ] } )
また、下記とも同等です。
db.articles.find( { tags: [ "ssl", "security" ] } )
したがって、 $all式は、 tagsフィールドがネストされた配列[ "ssl",
"security" ]を含む配列であるか、 または ネストされた配列と等しい配列であるドキュメントに一致します。
tags: [ [ "ssl", "security" ], ... ] tags: [ "ssl", "security" ]
空の配列
空の配列が渡された場合、$all はドキュメントに一致しません。
例
このページの例では、sample_mflixサンプルデータセットのデータを使用します。このデータセットを自己管理型MongoDB配置にロードする方法の詳細については、サンプルデータセットをロードする を参照してください。サンプルデータベースに変更を加えた場合、このページの例を実行するには、データベースを削除して再作成する必要がある場合があります。
値を一致させるための $all 使用
次の操作では、$all 演算子を使用して、movies コレクションで、 フィールドの値がdirectors John Murray AndersonとPèl Fejès を含む配列であるドキュメントをクエリします。
db.movies.find( { directors: { $all: ['John Murray Anderson','Pèl Fejès'] } }, { title: 1, directors: 1, year: 1 })
上記のクエリは、次のドキュメントを返します。
[ { _id: ObjectId('573a1391f29313caabcd9336'), title: 'King of Jazz', directors: [ 'John Murray Anderson', 'Pèl Fejès' ], year: 1930 } ]
と$all を使用$elemMatch
単一の配列要素またはドキュメントの配列に対して複数の条件を一致させるには、 を$all $elemMatch演算子とともに使用できます。
次の操作では、embedded_moviesコレクションで次のドキュメントをクエリします。
少なくとも 1 人のライターが
storyクレジットを持ち、screenplayクレジットはありません少なくとも 1 人のライターが
titlesクレジットを持ち、adaptationクレジットはありません
db.embedded_movies.find( { writers: { $all: [ { $elemMatch: { $regex: '\\bstory\\b', $not: { $regex: '\\bscreenplay\\b' }}}, { $elemMatch: { $regex: '\\btitles\\b', $not: { $regex: '\\badaptation\\b' }}} ]}}, { title: 1, writers: 1, year: 1 })
このクエリでは次のドキュメントが返されます。
[ { "_id": { "$oid": "573a1391f29313caabcd93a3" }, "title": "Men Without Women", "writers": [ "John Ford (story)", "James Kevin McGuinness (story)", "Dudley Nichols (screen play and scenario)", "Otis C. Freeman (titles)" ], "year": 1930 }, { "_id": { "$oid": "573a1391f29313caabcd8319" }, "title": "For Heaven's Sake", "writers": [ "Ted Wilde (story)", "John Grey (story)", "Clyde Bruckman (story)", "Ralph Spence (titles)" ], "year": 1926 }, { "_id": { "$oid": "573a1391f29313caabcd7bc3" }, "title": "The Iron Horse", "writers": [ "Charles Kenyon (story)", "John Russell (story)", "Charles Kenyon (scenario)", "Charles Darnton (titles)" ], "year": 1924 } ]
注意
ほとんどの場合、MongoDB では、配列はセットとして扱われません。この演算子は、このアプローチに対する注目すべき例外を提供します。
その他の例
配列のクエリに関するその他の例えは、以下を参照してください。
クエリに関するその他の例えについては、「ドキュメントのクエリ 」を参照してください。