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

MongoDB / PHP:配列から要素を削除します

    Eamorr、

    「notifications」キーは実際には配列ではないため、$pull演算子は使用しているドキュメントでは機能しません。これは、番号付きのキーが付いた埋め込みドキュメントであり、表面的には配列に似ています。このドキュメント構造を維持し、番号付きのキーの名前を自動的に変更する方法はありません。

    ドキュメントを少しリファクタリングすると、次のようになります。

    {
       "notifications": [
        {
           "type": "privateMessage",
           "fromUname": "Eamorr2",
           "time": 1292773522,
           "id": "1lfw70h789u13a1e67pv"
        },
        {
           "type": "privateMessage",
           "fromUname": "Eamorr2",
           "time": 1292773522,
           "id": "iwoidjsoskqp23nlwof"
        }
      ],
       "toUname": "Eamorr"
    }
    

    要素には、暗黙的に番号が付けられます。これで配列になったので、無料で入手できます。次のように$ pull演算子を使用できます(私はPHPドライバーに精通していないため、同等のシェルを提供します):

    db.messages.update({ "toUname" : "Eamorr" }, { $pull : { "notifications" : { "id" : "1lfw70h789u13a1e67pv" }}});
    

    ドキュメントを識別するために「toUname」キーを任意に使用しましたが、_id-fieldを使用することをお勧めします。また、メッセージの「id」キーを使用して、配列からプルするメッセージを識別しています。これは、はるかに安全であり、配列が変更された場合に誤って間違ったメッセージを削除しないようにするためです。削除する配列の序数を特定しました。

    お役に立てば幸いです。




    1. PHP用のMongoDBコネクタ:ページ付けのためにドキュメントをカウントします

    2. meteorでサブ配列ドキュメントを検索する

    3. redisでアクセント付きの文字列を保存および取得するにはどうすればよいですか?

    4. Rails-MongoDB(Mongoid)はdbとログをどこに保存しますか?