MongoDB - ドキュメントからフィールドを削除する方法

このMongoDBの記事では、ドキュメントと配列からフィールドを削除する方法を説明します。

1.ドキュメントからフィールドを削除する

ドキュメントのサンプルで、 "affLink"フィールドを削除したいとします。

domain.json

{
      "__id" : 1,
      "domain" : "mkyong.com",
      "affLink" : "abc"
}

すべてのドキュメントからフィールドを削除するには、 `{multi:true}`を設定します。そうでなければ、最初に一致したドキュメントのフィールドだけが削除されます。

db.domain.update({},{$unset: {affLink:1}},{multi: true});

出力

domain.json

{
      "__id" : 1,
      "domain" : "mkyong.com"
}

2.配列からフィールドを削除する

MongoDB 2.6より前のバージョンでは、配列からフィールドを削除する公式な関数はまだありません。それを修正するには、スクリプトを書く必要があります:

person.json

{
   __id: 1,
   name: "mkyong",
   addresses:[    {
      street: "99 The Rock Street",
      city: "Boston",
      state: "MA",
      zip: "66666"
    },
    {
      street: "88 WWF Street",
      city: "Boston",
      state: "MA",
      zip: "77777"
    }
  ]}

ドキュメントをループし、フィールド「状態」をアレイから1つずつ削除します。

 db.person.find({}).forEach(function(doc) {

    var address = doc.addresses;
    for(var i = 0; i < address.length; ++i) {
        var x = address[i];
        delete (x["state"]);

    }
    db.person.save(doc);

});

出力

person.json

{
   __id: 1,
   name: "mkyong",
   addresses:[    {
      street: "99 The Rock Street",
      city: "Boston",
      zip: "66666"
    },
    {
      street: "88 WWF Street",
      city: "Boston",
      zip: "77777"
    }
  ]}

参考文献

: Query document, Array]

リンク://タグ/配列/[配列]リンク://タグ/mongodb/[mongodb] フィールドを削除