Как удалить объект Json по идентификатору в узле Mongodb?

#node.js #mongodb #mongodb-query

#node.js #mongodb #mongodb-запрос

Вопрос:

у меня есть коллекция Mongodb с именем «СОБЫТИЯ», и в коллекции у меня есть объект array, который выглядит следующим образом:

 {
   "Events":[
      {
         "_id":"53ae59883d0e63aa77f7b5b2",
         "Title":"Title Blank",
         "Desc":"Description Blank",
         "Date":"2014-06-04 00:30",
         "Link":"http://googleparty.com",
         "Event":"Victoria Centre",
         "dateCreated":"28/6/2014  06:58"
      },
      {
         "_id":"53ae59883d0e63aa77f7b5b3",
         "Title":"Hello World",
         "Desc":"hello",
         "Date":"2014-06-04 00:30",
         "Link":"http://linkedinparty.com",
         "Event":"social",
         "dateCreated":"30/2/2014  11:10"
      }
   ]
}
 

как я мог бы удалить объект по идентификатору в node.js таким образом, » удалить (53ae59883d0e63aa77f7b5b2)» приведет к следующему:

 {
       "Events":[
           {
         "_id":"53ae59883d0e63aa77f7b5b3",
         "Title":"Hello World",
         "Desc":"hello",
         "Date":"2014-06-04 00:30",
         "Link":"http://linkedinparty.com",
         "Event":"social",
         "dateCreated":"30/2/2014  11:10"
          }
       ]
    }
 

С уважением

Ответ №1:

Если все, что вы действительно хотите сделать, это «очистить» массив, тогда вам просто нужно использовать $set оператор с .update() и «установить» массив как пустой:

 db.collection.update({},{ "$set": { "Events": [] } },{ "mutli": true})
 

Таким .update() образом, операция требует «запроса» для выбора документов в вашей коллекции, пустой запрос, как показано, выбирает все. Раздел «обновление» содержит $set операцию, которая просто заменяет текущее поле «События» пустым массивом.

Опция «multi» гарантирует, что это применяется к каждому соответствующему документу. По умолчанию используется false и будет обновляться только первый соответствующий документ.

Для более конкретных операций удаления выбранных элементов массива посмотрите на $pull operator . Теперь ваше редактирование показывает, что это то, что вы хотите сделать:

 db.collection.update(
    { "Events._id": ObjectId("53ae59883d0e63aa77f7b5b2") },
    { "$pull": { "Events": { "_id": ObjectId("53ae59883d0e63aa77f7b5b2") } } }
)
 

Но ваше включение массивов с _id полями, похоже, указывает на то, что вы используете mongoose, поэтому значения ObjectId приводятся автоматически:

 Model.update(
    { "Events._id": "53ae59883d0e63aa77f7b5b2" },
    { "$pull": { "Events": { "_id": "53ae59883d0e63aa77f7b5b2" } } },
    function(err,numAffected) {

    }
);
 

Комментарии:

1. довольно близко, но я не пытаюсь очистить массив, я просто пытаюсь удалить объект с идентификатором. Извините за вводящий в заблуждение пример 🙂

2. @Pizzy213codes Тогда что ты пытаешься сделать? Похоже, вы пытаетесь очистить массив своим вопросом. Возможно, вам следует обновить это, чтобы сказать, что вы на самом деле пытаетесь сделать.

3. еще раз извините за пример, который я привел ранее, я только что обновил вопрос, пожалуйста, взгляните 🙂

4. @Pizzy213codes и ответил. Я сделал ссылку на $pull оператор. Теперь есть пример того, как его использовать.

5. @neilLuun если я могу спросить, пожалуйста, как мне обрабатывать события, такие как нажатие кнопки, чтобы иметь возможность вызывать функцию в node.js ?