sql >> データベース >  >> NoSQL >> MongoDB

MongoDB $ pull

    MongoDBでは、$pullを使用できます 配列から値を削除する演算子。

    $pullを使用します update()などのメソッドと組み合わせて 指定したドキュメントを変更で更新します。

    productsというコレクションがあるとします。 次のドキュメントを使用:

    { "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] }
    { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] }
    { "_id" : 3, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }

    次のように、ドキュメント1の配列から要素を削除できます。

    db.products.update( 
      { _id: 1 }, 
      { $pull: { sizes: "XXL" } } 
    )

    出力:

    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

    このメッセージは、1つのドキュメントが一致し、1つ(つまり同じドキュメント)が変更されたことを示しています。

    今すぐコレクションを見てみましょう:

    db.products.find()

    結果:

    { "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL" ] }
    { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] }
    { "_id" : 3, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }

    ドキュメント1の配列の値がXXLであることがわかります。 指定どおりに削除されました。

    複数の値を削除する

    $inを使用できます 配列から削除する複数の値を指定する演算子。

    例:

    db.products.update( 
      { _id: 3 }, 
      { $pull: { sizes: { $in: ["XS", "XL"] } } } 
    )

    出力:

    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

    それでは、コレクションをもう一度確認しましょう:

    db.products.find()

    結果:

    { "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL" ] }
    { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] }
    { "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }

    ドキュメント3で、指定された2つの要素が配列から削除されていることがわかります。

    すべてのドキュメントを更新

    multi: trueを追加できます または、updateMany()を使用します 基準に一致するすべてのドキュメントを更新する方法。

    これを行うときは、最初のクエリドキュメントから選択基準を削除します(更新するドキュメントを指定します)。つまり、update()の最初の引数として空のドキュメントを使用します (またはupdateMany() )メソッド。

    例:

    db.products.update( 
      { }, 
      { $pull: { sizes: "XL" } },
      { multi: true }
    )

    出力:

    WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 2 })

    この場合、3つのドキュメントが一致していることがわかります(コレクションに3つのドキュメントがあるため)が、変更されたのは2つだけです(2つだけが値XLを持っていたため) sizesで 配列)。

    そして、コレクションを再確認します:

    db.products.find()

    結果:

    { "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M" ] }
    { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "L" ] }
    { "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }

    XLのすべてのインスタンスがわかります コレクション内のすべてのドキュメントから削除されました。

    ドキュメントの配列

    要素としてドキュメントを含む配列がある場合は、ドキュメント内のデータに一致する条件を指定することで、それらのドキュメントを削除できます。

    次のドキュメントを含むrestaurantsというコレクションがあるとします。

    {
    	"_id" : 1,
    	"name" : "The Rat",
    	"reviews" : [
    		{
    			"name" : "Stanley",
    			"date" : "04 December, 2020",
    			"ordered" : "Dinner",
    			"rating" : 1
    		},
    		{
    			"name" : "Tom",
    			"date" : "04 October, 2020",
    			"ordered" : "Lunch",
    			"rating" : 2
    		}
    	]
    }
    {
    	"_id" : 2,
    	"name" : "Yum Palace",
    	"reviews" : [
    		{
    			"name" : "Stacey",
    			"date" : "08 December, 2020",
    			"ordered" : "Lunch",
    			"rating" : 3
    		},
    		{
    			"name" : "Tom",
    			"date" : "08 October, 2020",
    			"ordered" : "Breakfast",
    			"rating" : 4
    		}
    	]
    }
    {
    	"_id" : 3,
    	"name" : "Boardwalk Cafe",
    	"reviews" : [
    		{
    			"name" : "Steve",
    			"date" : "20 December, 2020",
    			"ordered" : "Breakfast",
    			"rating" : 5
    		},
    		{
    			"name" : "Lisa",
    			"date" : "25 October, 2020",
    			"ordered" : "Dinner",
    			"rating" : 5
    		},
    		{
    			"name" : "Kim",
    			"date" : "21 October, 2020",
    			"ordered" : "Dinner",
    			"rating" : 5
    		}
    	]
    }

    この場合、reviewsというフィールド ドキュメントの配列が含まれています。各ドキュメントは、問題のレストランの異なるレビューです。

    $pullを使用できます 特定の基準に一致するレビューを削除します。

    例:

    db.restaurants.update(
      { },
      { $pull: { reviews: { rating: { $lt: 4 } } } },
      { multi: true }
    )

    出力:

    WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 2 })

    このメッセージは、3つのドキュメントがクエリ基準に一致し(すべてのドキュメントを選択したため)、2つのドキュメントが変更されたことを示しています(2つが$pullに一致したため) 基準)。

    コレクションをもう一度チェックして、効果を確認しましょう:

    db.restaurants.find().pretty()

    結果:

    { "_id" : 1, "name" : "The Rat", "reviews" : [ ] }
    {
    	"_id" : 2,
    	"name" : "Yum Palace",
    	"reviews" : [
    		{
    			"name" : "Tom",
    			"date" : "08 October, 2020",
    			"ordered" : "Breakfast",
    			"rating" : 4
    		}
    	]
    }
    {
    	"_id" : 3,
    	"name" : "Boardwalk Cafe",
    	"reviews" : [
    		{
    			"name" : "Steve",
    			"date" : "20 December, 2020",
    			"ordered" : "Breakfast",
    			"rating" : 5
    		},
    		{
    			"name" : "Lisa",
    			"date" : "25 October, 2020",
    			"ordered" : "Dinner",
    			"rating" : 5
    		},
    		{
    			"name" : "Kim",
    			"date" : "21 October, 2020",
    			"ordered" : "Dinner",
    			"rating" : 5
    		}
    	]
    }

    評価が4以上のレビューのみが残っていることがわかります。 4未満のレビューはすべて削除されました。


    1. SpringデータのクラスのMongoDbコレクション名を構成する方法

    2. redis、express、socket.ioを使用してセッションを機能させるにはどうすればよいですか?

    3. パターンに一致するキーの数を数える方法は?

    4. mongo Shellでのクエリにより、SyntaxErrorが発生します:missing:after property