Я уже проверил следующие вопросы о stackoverflow:

  1. Мангуст удаляет элемент массива в документе и сохраняет
  2. Как удалить элемент массива в mongodb?

Вот что я попробовал:

 var User = require('../model/user_model.js');

 router.put('/favoritemovies/:id', function(req, res){
     console.log(req.params.id);
     console.log(req.body.email);//I am able to console.log both value

     User.update( {_id: req.body.email}, { $pullAll: { favoriteMovies: {id:req.params.id} } } },
 });

Моя модель пользователя:

var mongoose = require('mongoose');

var Schema = mongoose.Schema;
var ObjectId = Schema.ObjectId;

var userSchema =  new Schema ({
    id: ObjectId,
    name:  String,
    password: String,
    email: {type: String, unique: true},
    favoriteMovies: []
});
module.exports = mongoose.model('users', userSchema);

Это структура моего объекта JSON:

{
    "_id": {
        "$oid": "583893712f599701531b60bf"
    },
    "name": "",
    "password": "",
    "email": "",
    "favoriteMovies": [
        {
            "vote_average": ,
            "video": ,
            "vote_count": ,
            "popularity": ,
            "backdrop_path": "",
            "title": "",
            "original_language": "",
            "original_title": "",
            "id": ,
            "genre_ids": [],
            "release_date": "",
            "overview": "",
            "adult": ,
            "poster_path": "",
            "_id": ""
        }

Я хотел бы удалить один или несколько элементов из массива favouriteMovies, если их идентификаторы соответствуют моему идентификатору. Я не получаю сообщения об ошибке, но элемент тоже не удаляется.

Что было бы правильным запросом для этого?

1
GaborH 26 Ноя 2016 в 00:12

3 ответа

Лучший ответ

Я обнаружил проблему, пропустил функцию обратного вызова в конце запроса.

User.update( {_id: req.body.email}, { $pull: { favoriteMovies: { id: req.params.id} }
    }, function(err, model){})
0
GaborH 25 Ноя 2016 в 22:28

Он будет работать с использованием pull, вы уверены, что условие обновления правильное?

{_id: req.body.email}

Что касается вашего примера:

 "_id": {
    "$oid": "583893712f599701531b60bf"
},

Похоже, вам стоит использовать:

{email: req.body.email}
1
Daphoque 28 Ноя 2016 в 16:27

$pullAll используется для удаления нескольких записей из array и принимает в свой запрос массив.

Вы хотите удалить только одну запись, поэтому просто используйте {{X0} }.

{ $pull: { favoriteMovies: {id: req.params.id} } } }
2
Brandon Horst 25 Ноя 2016 в 21:33