Docs Menu
Docs Home
/
MongoDB マニュアル
/ / / /

$all

項目一覧

  • 互換性
  • 構文
  • 動作
  • その他の例
$all

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

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

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

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

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

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

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

$allは、指定された値の$and操作と同等です。つまり、次の文です。

{ tags: { $all: [ "ssl" , "security" ] } }

上記は下記と同等です。

{ $and: [ { tags: "ssl" }, { tags: "security" } ] }

ネストされた配列の配列が渡された場合(例: [ [ "A" ] ] )、 $allは、 フィールドが要素としてネストされた配列を含むドキュメント(例: field: [ [ "A" ], ... ] )、またはフィールドはネストされた配列と等しい(例: field: [ "A" ] )。

たとえば、次のクエリを考えてみましょう[1]

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" ]
[1] 単一の要素のみをマッチングする場合は $all 式は不要であるため、単一の要素を含む $all 式は説明目的で記載しています。代わりに、1 つの要素を照合する場合、"contains" という式(arrayField: element)の方が適しています。

次の例では、ドキュメントを含む inventory コレクションを使用します。

{
_id: ObjectId("5234cc89687ea597eabee675"),
code: "xyz",
tags: [ "school", "book", "bag", "headphone", "appliance" ],
qty: [
{ size: "S", num: 10, color: "blue" },
{ size: "M", num: 45, color: "blue" },
{ size: "L", num: 100, color: "green" }
]
}
{
_id: ObjectId("5234cc8a687ea597eabee676"),
code: "abc",
tags: [ "appliance", "school", "book" ],
qty: [
{ size: "6", num: 100, color: "green" },
{ size: "6", num: 50, color: "blue" },
{ size: "8", num: 100, color: "brown" }
]
}
{
_id: ObjectId("5234ccb7687ea597eabee677"),
code: "efg",
tags: [ "school", "book" ],
qty: [
{ size: "S", num: 10, color: "blue" },
{ size: "M", num: 100, color: "blue" },
{ size: "L", num: 100, color: "green" }
]
}
{
_id: ObjectId("52350353b2eff1353b349de9"),
code: "ijk",
tags: [ "electronics", "school" ],
qty: [
{ size: "M", num: 100, color: "green" }
]
}

次の操作では、 $all演算子を使用して、 tagsフィールドの値がapplianceschoolbookを含む配列であるドキュメントをinventoryコレクションでクエリします。

db.inventory.find( { tags: { $all: [ "appliance", "school", "book" ] } } )

上記のクエリは、次のドキュメントを返します。

{
_id: ObjectId("5234cc89687ea597eabee675"),
code: "xyz",
tags: [ "school", "book", "bag", "headphone", "appliance" ],
qty: [
{ size: "S", num: 10, color: "blue" },
{ size: "M", num: 45, color: "blue" },
{ size: "L", num: 100, color: "green" }
]
}
{
_id: ObjectId("5234cc8a687ea597eabee676"),
code: "abc",
tags: [ "appliance", "school", "book" ],
qty: [
{ size: "6", num: 100, color: "green" },
{ size: "6", num: 50, color: "blue" },
{ size: "8", num: 100, color: "brown" }
]
}

フィールドにドキュメントの配列が含まれている場合は、$elemMatch 演算子とともに $all を使用できます。

次の操作は、qty フィールドの値が要素が $elemMatch 条件に一致する配列であるドキュメントを inventory コレクションにクエリします。

db.inventory.find( {
qty: { $all: [
{ "$elemMatch" : { size: "M", num: { $gt: 50} } },
{ "$elemMatch" : { num : 100, color: "green" } }
] }
} )

このクエリでは次のドキュメントが返されます。

{
"_id" : ObjectId("5234ccb7687ea597eabee677"),
"code" : "efg",
"tags" : [ "school", "book"],
"qty" : [
{ "size" : "S", "num" : 10, "color" : "blue" },
{ "size" : "M", "num" : 100, "color" : "blue" },
{ "size" : "L", "num" : 100, "color" : "green" }
]
}
{
"_id" : ObjectId("52350353b2eff1353b349de9"),
"code" : "ijk",
"tags" : [ "electronics", "school" ],
"qty" : [
{ "size" : "M", "num" : 100, "color" : "green" }
]
}

$all演算子は配列に対するクエリをサポートするために存在します。ただし、次の例のように、$all 演算子を使用して配列以外の field を選択することもできます。

db.inventory.find( { "qty.num": { $all: [ 50 ] } } )

しかし、同じクエリを表現するには、以下の形式を使用します。

db.inventory.find( { "qty.num" : 50 } )

どちらのクエリでも、num フィールドの値が 50 に等しい inventory コレクション内のすべてのドキュメントが選択されます。

注意

ほとんどの場合、MongoDB では、配列はセットとして扱われません。この演算子は、このアプローチに対する注目すべき例外を提供します。

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

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

Tip

以下も参照してください。

戻る

配列クエリ