Learn the "why" behind slow queries and how to fix them in our 2-Part Webinar.
Register now >
Docs Menu
Docs Home
/ /

$all(クエリ述語演算子)

$all

$all 演算子は、フィールドの値が指定されたすべての値と一致するドキュメントを選択します。一致するドキュメントには、指定されたすべての要素を含む配列である値を持つフィールド、または指定された要素に一致する単一の値を持つフィールドが含まれます。

次の環境でホストされる配置には $all を使用できます。

  • MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです

  • MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン

  • MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン

$all式を指定するには、次のプロトタイプを使用します。

{ <field>: { $all: [ <value1> , <value2> ... ] } }

$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 演算子を使用して、movies コレクションで、 フィールドの値がdirectors John Murray AndersonPè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演算子とともに使用できます。

次の操作では、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 では、配列はセットとして扱われません。この演算子は、このアプローチに対する注目すべき例外を提供します。

配列のクエリに関するその他の例えは、以下を参照してください。

クエリに関するその他の例えについては、「ドキュメントのクエリ 」を参照してください。

Tip

戻る

配列

項目一覧