AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

$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" ] のようなネストされた配列と等しくなります。

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

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 はどのドキュメントにも一致しません。

このセクションの例では、次のドキュメントが含まれている inventory コレクションを使用します。

db.inventory.insertMany ( [
{
_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 演算子を使用して、inventory フィールドの値がtags appliance、 、 を含む配列であるドキュメントをschool bookコレクションでクエリします。

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" }
]
}

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

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

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

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