MongoDB の $push と $addToSet の違い
この記事では、MongoDB の演算子について説明します。 $push
および $addToSet
演算子は何に使用されますか。
さらに、これら 2つの演算子の違いは、コード セグメントで示されます。 この記事では、次のトピックについて説明します。
- MongoDB の演算子
- MongoDB の
$push
- MongoDB の
$addToSet
MongoDB の演算子
演算子は、数学演算または論理演算を実行するようにコンパイラまたはインタプリタに通知する特別な記号またはキーワードです。
クエリ演算子は、開発者が複雑なクエリを作成して、アプリケーションに一致するデータ セットとやり取りできるようにすることで、MongoDB の機能を強化します。
以下では、MongoDB のさまざまなタイプの演算子について説明します。
- クエリおよびプロジェクション オペレータ - クエリ オペレータはデータベース内のデータの検出を支援しますが、プロジェクション オペレータはデータの表示方法を変更します。
- 更新オペレーター - 更新オペレーターを使用すると、データベースのデータを変更または追加できます。
- アグリゲーション パイプライン ステージ - アグリゲーション パイプラインで利用可能なアグリゲーション ステージ。
- 集約パイプライン オペレータ - 集約パイプライン オペレーションには、パイプライン ステージでドキュメントを定義および操作するために使用できる一連のオペレータがあります。
- クエリ修飾子 - クエリ修飾子は、クエリの実行方法を決定します。
MongoDB の$push
演算子
MongoDB の $push
演算子は、特定の値を配列にアタッチするために使用されます。 更新演算子のタイプは $push
演算子です。
指定されたフィールドが更新されるドキュメントに存在しない場合、$push
演算子は、指定された値を要素として持つ新しいフィールドとしてそれを追加します。 更新フィールドが配列型でない場合、操作は失敗しました。
値が配列の場合、$push
演算子は、更新時に配列全体を 1つの要素として追加します。 各値要素を個別に追加する場合は、$push
演算子を $each
修飾子と共に使用します。
構文:
db.collection.update( <query>,{ $push: { <field>: <value> } })
次のデータベース コレクションは、すべての例で使用されます。
サンプル コレクション:
db={
"student": [
{
"_id": 1,
"sem": 1,
"subjects": [
"phys",
"chem",
"maths",
"gkn",
"stat",
"astro"
],
"achieve": [
70,
87,
90,
90,
65,
81
]
}
]
}
MongoDB $push
演算子の例
条件 subjects
が "maths"
のときに配列フィールドに 95 を追加したい場合は、以下の MongoDB コマンドを使用できます。
db.student.update( { "subjects" : "maths" },{ $push: { "achieve": 95 } });
前の例で説明した基準がこのアクションと一致するため、値 95 が配列に追加されます。
新しく更新されたドキュメントを表示するには:
db.student.find().pretty();
上記のクエリの出力は、このスクリーンショットで確認できます。
フィールドが配列でない場合の MongoDB $push
の例
配列型フィールドではない sem
列に 2 を追加する場合は、以下の MongoDB コマンドを使用できます。
db.student.update( { "subjects" : "maths" },{ $push: { "sem": 2 } });
上記の例の sem
フィールドは配列型ではないため、操作は失敗し、次の結果が生成されます。
Cannot apply $push/$push All modifier to non-array
$each
修飾子を使用した MongoDB $push
の例
条件 subjects
が "maths"
である文書化された学生のために達成された配列に、多くのエントリまたは複数の要素 (77,49,83
) を追加する場合は、以下の MongoDB コマンドを使用できます。
db.student.update( { "subjects" : "maths" },{ $push: { "achieve": {$each : [77,49,83 ]} } });
上記の例では、$each
修飾子を使用して、基準トピック "maths"
に一致するいくつかのエントリ 77,49,83
を配列の実績に追加しました。
新しく更新されたドキュメントを表示するには:
db.student.find().pretty();
上記のクエリの出力は、このスクリーンショットで確認できます。
MongoDB の $addToSet
$addToSet
演算子は、配列に値がまだ存在しない場合にのみ、配列に値を追加または追加します。 値がすでに配列にある場合、$addToSet
は変更せずに同じ配列を返します。
$addToSet
演算子は、更新時に配列内に重複するエントリがないことを保証します。 ただし、表示内の要素の順序は、値を追加した後に変更できます。
構文:
db.collection.update( { <field>: <value> }, { $addToSet: { <field>: <addition> } } );
上記で使用したコレクション:
{ "_id" : 1, "sem" : 1, "achieve" : [ 80, 70, 90 ] }
値を追加する $addToSet
の例
値 92 を配列に追加する場合は、以下の MongoDB コマンドを使用できます。
db.student.update( { "sem": 1}, { $addToSet: { "achieve": 92 } } );
上記のコードは、配列フィールドの達成に 92 を追加します。
新しく更新されたドキュメントを表示するには:
db.student.find().pretty();
コマンドの出力:
{ "_id" : 1, "achieve" : [ 70, 80, 90, 92 ], "sem" : 1 }
$each
修飾子を使用して複数の値を追加する $addToSet
の例
次の MongoDB コマンドは、番号 10 と 11 を配列フィールドの実績に追加する場合があります。
db.student.update( { "sem": 1}, { $addToSet: { "achieve":{$each:[10,11]}}});
上記の例では、$each
修飾子を使用して配列フィールドに数値 10 と 11 が付加されています。
新しく更新されたドキュメントを表示するには:
db.student.find().pretty();
上記のクエリの出力は、このスクリーンショットで確認できます。