182

ここに配列構造があります

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

    ]
}

ここでわかっているのは mongo id( _id) と phone number( +1786543589455) だけなので、対応する配列要素全体をドキュメントから削除する必要があります。つまり、電話配列のゼロ インデックス要素は電話番号と一致し、対応する配列要素を削除する必要があります。

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

次の更新方法で試しました

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

number: +1786543589455ただし、電話配列のゼロのインデックス付き要素ではなく、内部配列オブジェクトから削除 します。pull成功せずに試してみました。

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

4

7 に答える 7

304

次のクエリを試してください。

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

指定されたドキュメントを検索し、その配列から_id電話を削除します。+1786543589455contact.phone

を使用$unsetして配列内の値を設定解除 (に設定null) できますが、完全に削除することはできません。

于 2013-06-06T10:25:10.463 に答える
1

プロファイル コレクションに次のドキュメントがあるとします。

{ _id: 1、投票数: [ 3, 5, 6, 7, 7, 8 ] }

次の操作は、($gte) 6 以上のすべてのアイテムを votes 配列から削除します。

db.profiles.update( { _id: 1 }, { $pull: { 票: { $gte: 6 } } } )

更新操作の後、ドキュメントには 6 未満の値しかありません。

{ _id: 1、投票数: [ 3, 5 ] }

複数の項目に同じ値を指定する場合は、$pull の代わりに $pullAll を使用する必要があります。

複数の連絡先番号を持つ質問では、これを同じように使用します。

collection.update( { _id: id }, { $pullAll: { 'contact.phone': { 番号: '+1786543589455' } } } ); その番号に一致するすべてのアイテムが削除されます。連絡先電話で

マニュアルを読んでみてください。

于 2021-12-08T04:36:59.433 に答える