MongoDBで$push演算子を使って配列を更新する方法
MongoDBで既存の配列に新しい要素を追加・更新するには、$push 演算子を使用します。さらに $each と $slice を組み合わせることで、複数の要素を一度に追加しながら、配列のサイズを制限することも可能です。
まず、ドキュメントを含むコレクションを作成しましょう。
> db.demo283.insertOne({"Name":"Chris","Status":["Active","Inactive"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e4ab97ddd099650a5401a75")
}find() メソッドを使って、コレクション内のすべてのドキュメントを表示します。
> db.demo283.find();
実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5e4ab97ddd099650a5401a75"), "Name" : "Chris", "Status" : [ "Active", "Inactive" ] }$push、$each、$slice を組み合わせた配列の更新
以下は、$push 演算子を使って配列を更新するクエリの例です。$each で追加したい複数の値を指定し、$slice: -4 によって配列の末尾4件のみを保持するように設定しています。
> db.demo283.update({}, {$push: {Status:{$each:['Regular', 'NotRegular'], '$slice': -4}}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })更新後、もう一度 find() メソッドを実行して結果を確認してみましょう。
> db.demo283.find();
実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5e4ab97ddd099650a5401a75"), "Name" : "Chris", "Status" : [ "Active", "Inactive", "Regular", "NotRegular" ] }このように、$push と $each を組み合わせることで、複数の要素を一度に配列へ追加できます。また、$slice に負の値を指定した場合は、配列の末尾から指定した件数だけが保持され、それより古い要素は自動的に削除されます。配列のサイズを一定に保ちたい場合に非常に便利なテクニックです。
-
MongoDBのaggregate()で3階層にネストされた埋め込みドキュメントの配列をフィルタリングする方法
MongoDBでネストされた配列をフィルタリングする基本アプローチMongoDBで3階層にネストされた埋め込みドキュメントの配列をフィルタリングするには、aggregate()メソッドを使用します。集計パイプラインの中で$unwindによって配列を展開し、$matchで条件に一致するドキュメントを絞り込むのが基本的な流れです。この記事では、実際のコード例を通じて具体的な手順を解説します。1. サンプルコレクションの作成まずは動作確認用のコレクションを作成し、ドキュメントを挿入してみましょう。> db.demo736.insertOne( ... { ... _id:
-
MongoDBでコレクション内のドキュメントの各フィールドを数式を使って更新する方法
コレクション内のドキュメントの各フィールドを数式(計算式)で一括更新したい場合は、MongoDBの update() メソッドに $mul 演算子と全位置演算子 $[] を組み合わせて使用します。本記事では、配列内のすべての要素に対して特定のフィールドの値を乗算で更新する具体的な手順を解説します。サンプルコレクションの作成まず、insertOne() メソッドを使って、ドキュメントを含むコレクションを作成します。> db.demo749.insertOne({details:[{id:1,a:10},{id:2,a:5},{id:3,a:20}]}); { acknowledge