MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB/PHP:изтриване на елемент от масива

Eamorr,

Операторът $pull няма да работи с документа, който използвате, защото ключът "notifications" всъщност не е масив. Това е по-скоро вграден документ с номерирани клавиши, което го прави външно наподобяващ масив. Няма начин (за който знам) да запазите тази структура на документа и номерираните клавиши да се преименуват автоматично.

Ако преработите леко документа си, за да изглежда така:

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

Елементите все още ще бъдат номерирани имплицитно. Вече е масив, така че го получавате безплатно. Можете да използвате оператора $pull по този начин (не съм запознат с PHP-драйвера, така че ви давам еквивалента на shell):

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

Произволно използвах ключа "toUname", за да идентифицирам документа, но предполагам, че ще искате да използвате полето _id. Освен това използвам ключа „id“ на съобщенията, за да идентифицирам съобщението, което да изтегля от масива, тъй като е много по-безопасно и гарантира, че случайно няма да премахнете грешното съобщение, в случай че масивът се е променил оттогава идентифицирахте порядъка на масива за премахване.

Надявам се, че това помага.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongoose и нова схема:връща ReferenceError:схемата не е дефинирана

  2. @DBRef не изтегля данните, когато използва Spring Data Mongo

  3. Mongoose Опит за отваряне на незатворена връзка

  4. Как правилно да използвате повторно връзката с Mongodb в приложението и модулите на NodeJs

  5. Грешка в приложението след внедряване на приложението Meteor 1.0 на heroku