MongoDBでマトリックス形式のドキュメントから値を削除する方法($pull演算子の使い方)
マトリックス(配列の中に配列が入った構造)から特定の値を削除したい場合、MongoDBでは $pull 演算子を使用します。本記事では、実際にコレクションを作成し、マトリックス形式のドキュメントから値を削除する手順を解説します。
1. サンプルコレクションの作成
まず、ドキュメントを含むコレクションを作成しましょう。
> db.demo632.insertOne(
... {
... "arrayMatrix": [
... [10,20],
... [10,20],
... [10,20],
... [10,20],
... [10,20],
... [10,20]
... ]
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5e9b27b46c954c74be91e6c0")
}2. 作成したドキュメントの確認
find() メソッドを使って、コレクション内のすべてのドキュメントを表示します。
> db.demo632.find().pretty();
実行すると、次のような出力が得られます。
{
"_id" : ObjectId("5e9b27b46c954c74be91e6c0"),
"arrayMatrix" : [
[
10,
20
],
[
10,
20
],
[
10,
20
],
[
10,
20
],
[
10,
20
],
[
10,
20
]
]
}各サブ配列には「10」と「20」が格納されていることが確認できます。
3. $pull演算子で値を削除する
次に、マトリックス形式のドキュメントから値「20」を削除するクエリを実行します。$pull 演算子では、ドット記法(arrayMatrix.0 など)を使って、各サブ配列の位置を個別に指定する必要があります。
> db.demo632.update(
... {},
... {
... "$pull": {
... "arrayMatrix.0": 20,
... "arrayMatrix.1": 20,
... "arrayMatrix.2": 20,
... "arrayMatrix.3": 20,
... "arrayMatrix.4": 20,
... "arrayMatrix.5": 20
... }
... }
... )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })実行結果を見ると、1件のドキュメントがマッチし、正常に更新されたことがわかります。
4. 削除後のドキュメントを確認
再度 find() メソッドでドキュメントを表示してみましょう。
> db.demo632.find().pretty();
実行すると、次のような出力が得られます。
{
"_id" : ObjectId("5e9b27b46c954c74be91e6c0"),
"arrayMatrix" : [
[
10
],
[
10
],
[
10
],
[
10
],
[
10
],
[
10
]
]
}まとめ
このように、$pull 演算子とドット記法を組み合わせることで、マトリックス(ネストされた配列)内の特定の値を削除できます。ポイントは、各サブ配列のインデックス(arrayMatrix.0、arrayMatrix.1 など)を明示的に指定することです。なお、MongoDBの新しいバージョンでは update() の代わりに updateOne() や updateMany() の使用が推奨されている点にも留意してください。
-
MongoDBコレクションから重複を削除する方法|unique制約の使い方を解説
MongoDBコレクションから重複を削除する方法MongoDBのコレクションに重複データが登録されるのを防ぎたい場合は、ユニーク制約(unique: true)を設定するのが最も基本的かつ確実な方法です。対象フィールドにユニークインデックスを作成しておくことで、同じ値を持つドキュメントの挿入が自動的に拒否され、コレクション内に重複が存在しない状態を維持できます。基本構文以下のように、コレクション名とフィールド名を指定してユニークインデックスを作成します。「dropDups: true」を付けることで、インデックス作成時点で既に存在していた重複ドキュメントも削除され、各グループの最初の1件のみが
-
MongoDBドキュメントから特定の値をフィルタリングする方法
MongoDBドキュメントから特定の値をフィルタリングする方法MongoDBでドキュメント内の配列から特定の値を抽出したい場合は、集計パイプラインで $filter を使用します。この記事では、実際にコレクションを作成し、特定の条件に一致する要素だけをフィルタリングする手順を、サンプルコードとともに解説します。1. サンプルコレクションの作成まず、insertOne() メソッドを使って、配列フィールドを含むドキュメントを持つコレクションを作成します。 db.demo751.insertOne( ... { ... _id: 101, ... details: [