MongoDBの配列から偶数を取り除く方法|$pullと$modの使い方を解説
MongoDBでは、$mod演算子を使って偶数を判定し、$pull演算子と組み合わせることで、配列から偶数だけを取り除くことができます。この記事では、実際のコード例を交えながら手順をわかりやすく解説します。
1. サンプルコレクションの作成
まず、ドキュメントを含むコレクションを作成します。ここでは数値が格納された配列「AllNumbers」を持つドキュメントを挿入します。
> db.pullEvenNumbersDemo.insertOne({"AllNumbers":[101,102,104,106,108,109,110,112,14,17,18,21]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd45b072cba06f46efe9eea")
}2. 挿入したドキュメントの確認
find()メソッドを使って、コレクション内のすべてのドキュメントを表示してみましょう。
> db.pullEvenNumbersDemo.find().pretty();
上記のクエリを実行すると、次のような出力が得られます。
{
"_id" : ObjectId("5cd45b072cba06f46efe9eea"),
"AllNumbers" : [
101,
102,
104,
106,
108,
109,
110,
112,
14,
17,
18,
21
]
}3. $pullと$modで偶数を配列から取り除く
偶数とは「2で割った余りが0」になる数値です。$mod演算子に [2, 0] を指定することで偶数を条件として抽出でき、これを$pullと組み合わせることで、配列内のすべての偶数を一括して削除できます。
> db.pullEvenNumbersDemo.updateMany({}, { "$pull": { "AllNumbers": { "$mod": [ 2, 0 ] } } });
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }ここで使用している各要素の意味は以下の通りです。
- $pull: 指定した条件に一致する要素を配列からすべて削除する更新演算子
- $mod: 値を指定した数で割った余りが指定値と一致するかを判定する演算子。
[2, 0]は「2で割った余りが0」=偶数を意味します - updateMany: 条件に一致するすべてのドキュメントを更新します。第一引数に空のオブジェクト
{}を渡すことで全ドキュメントが対象になります
4. 更新結果の確認
もう一度すべてのドキュメントを確認してみましょう。
> db.pullEvenNumbersDemo.find().pretty();
実行すると、次のように偶数だけが取り除かれた結果が出力されます。
{
"_id" : ObjectId("5cd45b072cba06f46efe9eea"),
"AllNumbers" : [
101,
109,
17,
21
]
}ご覧の通り、元の配列から偶数(102、104、106、108、110、112、14、18)がすべて削除され、奇数のみが残っています。
まとめ
MongoDBで配列から偶数を取り除くには、$mod: [2, 0]で偶数を判定し、$pull演算子で削除するのが最もシンプルな方法です。同様のテクニックは、特定の条件に一致する配列要素の一括削除など、さまざまな場面で応用できます。
-
MongoDBのオブジェクト配列からアイテムを取得する方法
MongoDBでオブジェクト配列からアイテムを取得するには?MongoDBのドキュメント内にネストされたオブジェクト配列から特定のアイテムを取り出したい場合は、aggregate()メソッドを使用します。集計パイプラインの各ステージを組み合わせることで、配列の展開・絞り込み・集約を柔軟に行えます。まずは、サンプルコレクションにドキュメントを作成してみましょう。> db.demo459.insertOne( ... { _id : 1, ... Information : [ ... { ... Name : Chris, ... _id : new O
-
MongoDBでドキュメント内の配列から特定の値を削除する方法($pull演算子の使い方)
MongoDBで配列から値を削除したい場合は、$pull 演算子を使用します。$pull は、既存の配列から指定した条件に一致する値(または複数の値)のすべてのインスタンスを取り除くための更新演算子です。1. サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成しましょう。> db.demo535.insertOne( ... { ... studentId : 101, ... studentName : Chris, ... ListOfMailIds : [ ... Chris@gmail.com, ... Chr