MongoDBで$addToSetの反対の操作を行うには?$pull演算子の使い方を解説
$pull演算子について
MongoDBには「$removeFromSet」という名前の演算子は存在しません。$addToSetの反対の操作、すなわち配列から特定の要素を削除したい場合は、$pull演算子を使用します。
サンプルコレクションの作成
まずは、ドキュメントを含むコレクションを作成しましょう。以下のクエリを実行すると、ドキュメントが挿入されます。
> db.oppositeAddToSetDemo.insertOne({"StudentName":"John","StudentHobby":["Cricket","Cooking","Drawing"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8eddcc2f684a30fbdfd588")
}
> db.oppositeAddToSetDemo.insertOne({"StudentName":"Carol","StudentHobby":["Cricket","Dance","Hiking"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8eddfd2f684a30fbdfd589")
}
> db.oppositeAddToSetDemo.insertOne({"StudentName":"David","StudentHobby":["Learning","Photography"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8ede272f684a30fbdfd58a")
}各ドキュメントには学生の名前(StudentName)と趣味の配列(StudentHobby)が格納されています。
挿入したドキュメントの確認
find()メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。クエリは次のとおりです。
> db.oppositeAddToSetDemo.find().pretty();
実行結果は以下のようになります。
{
"_id" : ObjectId("5c8eddcc2f684a30fbdfd588"),
"StudentName" : "John",
"StudentHobby" : [
"Cricket",
"Cooking",
"Drawing"
]
}
{
"_id" : ObjectId("5c8eddfd2f684a30fbdfd589"),
"StudentName" : "Carol",
"StudentHobby" : [
"Cricket",
"Dance",
"Hiking"
]
}
{
"_id" : ObjectId("5c8ede272f684a30fbdfd58a"),
"StudentName" : "David",
"StudentHobby" : [
"Learning",
"Photography"
]
}$pull演算子で配列から要素を削除する
ここで、$pull演算子を使って配列から要素を削除してみましょう。以下の例では、Johnの趣味リストから「Cooking」を取り除いています。
> db.oppositeAddToSetDemo.update(
... {"StudentName": "John"},
... {$pull: { "StudentHobby": "Cooking"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })実行結果の「nModified : 1」は、1件のドキュメントが正常に更新されたことを示しています。
削除後のドキュメントの確認
find()メソッドで再度ドキュメントを取得し、更新が正しく反映されているか確認しましょう。クエリは次のとおりです。
> db.oppositeAddToSetDemo.find().pretty();
実行結果は以下のようになります。
{
"_id" : ObjectId("5c8eddcc2f684a30fbdfd588"),
"StudentName" : "John",
"StudentHobby" : [
"Cricket",
"Drawing"
]
}
{
"_id" : ObjectId("5c8eddfd2f684a30fbdfd589"),
"StudentName" : "Carol",
"StudentHobby" : [
"Cricket",
"Dance",
"Hiking"
]
}
{
"_id" : ObjectId("5c8ede272f684a30fbdfd58a"),
"StudentName" : "David",
"StudentHobby" : [
"Learning",
"Photography"
]
}まとめ
$addToSetが配列に要素を追加する演算子であるのに対し、その反対の役割を担うのは$pull演算子です。「$removeFromSet」という演算子はMongoDBには存在しないため、配列から特定の値を削除したい場合は$pullを使用するようにしましょう。
-
MongoDBの$addToSet演算子でネストされた配列(配列内の配列)に値を追加する方法
MongoDBで、配列の中にさらに配列が存在する構造(ネストされた配列)に対して値を追加したい場合は、update()メソッドと$addToSet演算子を組み合わせて使用します。$addToSet演算子は、指定した値が配列にまだ存在しない場合にのみ値を追加します。すでに同じ値が存在する場合は何も行わないため、重複のない配列を簡単に維持できるのが特徴です。サンプルコレクションの作成まず、ネストされた配列を含むドキュメントを持つコレクションを作成します。> db.demo509.insertOne( ... { ... value1 : [ ... { ...
-
MongoDBの$addToSet演算子を使って単一フィールドの一意な値を取得する方法
MongoDBの $addToSet 演算子は、配列に値を追加するための更新演算子です。すでに配列内に同じ値が存在する場合は、重複を避けるために何も追加しません。この特性を活かすことで、集計パイプライン(aggregate)と組み合わせて、特定のフィールドから重複のない値の一覧を簡単に取得できます。この記事では、サンプルコレクションを作成し、$addToSet を使って「ProjectName」フィールドの一意な値を取得する手順を解説します。1. サンプルコレクションの作成まず、insertOne() メソッドを使ってドキュメントを含むコレクションを作成します。> db.demo533.