MongoDBで配列に単一の値を追加する方法|$push演算子の使い方を解説
MongoDBで配列に単一の値だけを追加したい場合は、$push 演算子を使用します。この記事では、実際のコード例をもとに、ネストされた配列フィールドへ値を追加する手順をわかりやすく解説します。
1. サンプルコレクションの作成
まずは、ドキュメントを含むコレクションを作成します。ここでは学生情報を管理する「demo3」というコレクションを用意しました。
> db.demo3.insertOne(
... {
... "Information" : {
... "Of" : {
... "StudentCode" : "STUDENT101",
... "StudentFavouriteSubject" : [
... "MySQL",
... "Java"
... ]
... }
... }
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5e08b7ef25ddae1f53b6221b")
}
このドキュメントには、「Information.Of.StudentFavouriteSubject」というネストされた構造の中に、好きな科目を格納する配列が含まれています。
2. 登録済みドキュメントの確認
find() メソッドを使って、コレクション内のすべてのドキュメントを表示してみましょう。
> db.demo3.find();
実行すると、以下のような出力が得られます。
{ "_id" : ObjectId("5e08b7ef25ddae1f53b6221b"), "Information" : { "Of" : { "StudentCode" : "STUDENT101", "StudentFavouriteSubject" : [ "MySQL", "Java" ] } } }
現時点では、配列には「MySQL」と「Java」の2つの要素が格納されています。
3. $push演算子で配列に値を追加する
それが本題の、MongoDBの配列に単一の値を追加するクエリです。ドット記法(Information.Of.StudentFavouriteSubject)でネストされた配列のパスを指定し、$push で新しい値を追加します。
> db.demo3.update({},{$push:{"Information.Of.StudentFavouriteSubject":"Spring and Hibernate"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
実行結果の nModified : 1 により、1件のドキュメントが正常に更新されたことがわかります。
4. 更新後のドキュメントを再確認
pretty() メソッドを使って、整形された形式でもう一度すべてのドキュメントを確認してみましょう。
> db.demo3.find().pretty();
実行すると、以下のような出力が得られます。
{
"_id" : ObjectId("5e08b7ef25ddae1f53b6221b"),
"Information" : {
"Of" : {
"StudentCode" : "STUDENT101",
"StudentFavouriteSubject" : [
"MySQL",
"Java",
"Spring and Hibernate"
]
}
}
}
配列の末尾に「Spring and Hibernate」が正常に追加されていることが確認できます。
補足:$pushを使う際のポイント
- $pushと$addToSetの違い:
$pushは同じ値がすでに存在していても重複して追加されます。重複を避けたい場合は$addToSetを使用してください。 - 複数ドキュメントの一括更新: 上記の例のように空のフィルター
{}を指定した場合、条件に一致した最初の1件のみが更新されます。すべてのドキュメントを対象にしたい場合はupdateMany()を使用しましょう。 - 複数値の同時追加:
$each修飾子と組み合わせることで、複数の値を一度に配列へ追加することも可能です。
-
MongoDBで配列の値を使ってコレクションを並べ替える方法
MongoDBのコレクションを配列の値を基準にソートしたい場合は、aggregate()メソッドと $sort ステージを組み合わせて使用します。さらに、配列を個々のドキュメントに分解するために $unwind も活用します。 サンプルコレクションの作成 まず、ドキュメントを含むコレクションを作成しましょう。ここでは、学生ごとの詳細情報(名前とスコア)を配列として持つドキュメントを挿入します。 > db.demo577.insertOne( ... { ... student: { ... details: [ ... { .
-
MongoDBで配列をクエリして特定の値を取得する方法
配列から特定の値を取得するには、aggregate()メソッドと$projectステージを組み合わせて使用します。まずは、ドキュメントを含むコレクションを作成してみましょう。 > db.demo761.insertOne( ... { ... "details": [ ... { ... "