$addToSet (セットに追加)
最終更新:2026-10-09
$addToSet (セットに追加)
$addToSet は、配列に値がまだ存在しない場合のみ追加し、配列の重複を防ぎます。`{ $addToSet: { tags: 'mongodb' } }` のように使います。複数の値をまとめて追加するには $each と組み合わせます。重複判定は値全体を比較します(ネストしたドキュメントはフィールドごとに比較)。タグやフォローリストに最適です。
| カテゴリ | 配列更新 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $addToSet: { <array field>: <value> } }
⚙️ パラメータ
| 配列フィールド | 追加先の配列フィールド。 |
|---|---|
| 値 | 追加する値。すでに存在する場合はスキップされます。 |
戻り値:更新結果
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $addToSet: タグを追加(あればスキップ)
db.articles.updateOne(
{ _id: 1 },
{ $addToSet: { tags: 'mongodb' } }
)
// 複数の値は $each が必要
db.articles.updateOne(
{ _id: 1 },
{ $addToSet: { tags: { $each: ['database', 'nosql'] } } }
)
出力:
// 既存の mongodb は重複せず、database と nosql が追加される
📌 注意事項
- 重複判定は値全体で行う
- 複数の値を一度に追加するには $each が必要
- フィールドがなければ配列を作成し、配列以外のフィールドはエラーになる
🏷️ 関連タグ
💡 関連ケース
📚 関連チュートリアル
❓ よくある質問
Q$addToSet と $push の違いは?
A$addToSet は重複を排除します。$push は単純に追加し、重複も許可します。
Q複数の値を一度に追加するには?
A$each を使います: { $addToSet: { tags: { $each: ['a', 'b'] } } }
Q$addToSet はネストしたドキュメントを追加できますか?
Aはい。重複判定はドキュメント全体を比較します。