1. ホーム
  2. mongodb

[解決済み] mongodbで配列の要素を削除する方法は?

2022-04-20 22:30:01

質問

以下は配列の構造です。

contact: {
    phone: [
        {
            number: "+1786543589455",
            place: "New Jersey",
            createdAt: ""
        }
        {
            number: "+1986543589455",
            place: "Houston",
            createdAt: ""
        }

    ]
}

ここでは、mongoのidだけ知っています( _id ) と電話番号( +1786543589455 つまり、phone 配列のインデックスがゼロの要素が電話番号とマッチし、 対応する配列要素を削除する必要があります。

contact: {
    phone: [
        {
            number: "+1986543589455",
            place: "Houston",
            createdAt: ""
        }
    ]
}

以下の更新方法で試してみました。

collection.update(
    { _id: id, 'contact.phone': '+1786543589455' },
    { $unset: { 'contact.phone.$.number': '+1786543589455'} }
);

しかし、それは削除されます。 number: +1786543589455 は、フォーン配列のゼロインデックス要素ではなく、 内部の配列オブジェクトから取得されます。試しに pull も成功しませんでした。

mongodbで配列要素を削除する方法は?

どのように解決するのですか?

以下のクエリを試してみてください。

collection.update(
  { _id: id },
  { $pull: { 'contact.phone': { number: '+1786543589455' } } }
);

これは、指定された _id を削除し、電話番号の +1786543589455 をその contact.phone の配列になります。

を使用することができます。 $unset を使用すると、配列内の値のセットを解除することができます (配列内の値を null ) が、完全に削除されるわけではありません。