MongoDBで$pushを使って配列にドキュメントを追加する方法
MongoDBでは、$push演算子をupdate()メソッドと組み合わせて使うことで、既存の配列フィールドに新しいドキュメントを追加できます。この記事では、実際のコード例を通じてその手順を詳しく解説します。
1. コレクションとドキュメントの作成
まず、insertOne()メソッドを使って、配列フィールドを含むドキュメントを持つコレクションを作成します。
> db.demo310.insertOne({"Name":"Chris","details":[{"Id":101,"Subject":"MySQL"},{"Id":102,"Subject":"MongoDB"}]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e50cabdf8647eb59e562043")
}
2. ドキュメントの確認
find()メソッドを使って、コレクション内のすべてのドキュメントを表示します。
> db.demo310.find();
実行すると、以下のような出力が得られます。
{
"_id" : ObjectId("5e50cabdf8647eb59e562043"), "Name" : "Chris", "details" : [
{ "Id" : 101, "Subject" : "MySQL" }, { "Id" : 102, "Subject" : "MongoDB" }
]
}
3. $pushでドキュメントを配列に追加する
次に、$push演算子を使って、details配列に新しいドキュメントを追加するクエリを実行します。対象のドキュメントは、_idで指定します。
> db.demo310.update({ _id:ObjectId("5e50cabdf8647eb59e562043")},
... { $push: {"details": {
... "Id" : 103,
... "Subject": "Java"
... }}
... }
... )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
nModified: 1という結果から、1件のドキュメントが正常に更新されたことがわかります。
4. 更新結果の確認
再度find()メソッドを実行して、更新後のドキュメントを確認しましょう。
> db.demo310.find();
{
"_id" : ObjectId("5e50cabdf8647eb59e562043"), "Name" : "Chris", "details" : [
{ "Id" : 101, "Subject" : "MySQL" }, { "Id" : 102, "Subject" : "MongoDB" },
{ "Id" : 103, "Subject" : "Java" }
]
}
まとめ
このように、$push演算子を使用すれば、配列フィールドの末尾に新しい要素(ドキュメント)を簡単に追加できます。なお、MongoDBの新しいバージョンではupdateOne()やupdateMany()の使用が推奨されているため、実運用ではこちらを採用するとよいでしょう。また、重複防止が必要な場合は$addToSet演算子も検討してみてください。
-
MongoDBでドキュメントから配列要素を削除するクエリの書き方($pull演算子)
MongoDBのドキュメントから配列内の特定の要素を削除したい場合は、更新演算子「$pull」を使用します。$pullは、指定した値や条件に一致する要素を配列からすべて取り除くことができる便利な演算子です。$pullの基本構文db.yourCollectionName.update( { }, { $pull: { yourFieldName: yourValue } }, { multi: true } );第1引数に空のクエリ「{ }」を指定するとすべてのドキュメントが対象になり、「multi: true」オプションを付けることで、条件に一致した複数のドキュメントに対して一括で
-
【MongoDB】idがドキュメント内の配列フィールドの値と一致する場合に除外するクエリの書き方
MongoDBでは、ドキュメントの id フィールドの値が、同一ドキュメント内の配列型フィールド(例: subjectid)に含まれている場合に、そのドキュメントを検索結果から除外したいケースがあります。このような条件を実現するには、 $expr 演算子と組み合わせて $not および $in を使用します。本記事では、サンプルコレクションの作成からクエリの実行、出力結果の確認までを順を追って解説します。 サンプルコレクションの作成 まずは、動作確認用のドキュメントを含むコレクションを作成します。ここでは、 id フィールドと、文字列の配列を持つ subjectid フィールドを備えた2件のド