Использование метода $pull с Deployd

#mongodb #deployd

#mongodb #deployd

Вопрос:

У меня есть API Deployd, который предоставляет структуру json, подобную этой:

 [
  {id: "1"
   username: "john",
   password: " ..... ",
   email: "example@gmail.com",
   coins: 60,
   badges: [ ],
   courses:[
       { id: "123456",
         title: "Animals",
         grades_per_module: [ [30], [28, 26], [25, 24]]
         ..... 
       },
       { id: "112233",
         title: "Food",
         grades_per_module: [ [20, 25, 27], [22]]
         ..... 
       }
    ]
  }, 

  {id: "2"
   username: "mark",
   password: " ..... ",
   email: "ex@gmail.com",
   coins: 40,
   badges: [ ],
   courses:[
       { id: "123456",
         title: "Animals",
         grades_per_module: [ [27], [21, 30], [30, 30]]
         ..... 
       }
    ]
  }
] 
 

Затем мне нужно удалить курс intere с id =»112233″ пользователя «john», используя код angular.

Итак, я использую этот код, но он не работает:

 this.http.put('http://localhost:2403/users/1',
              { "courses": { $pull: { "id": 112233 } }
             }).subscribe( ..... )
 

Deployd API возвращает мне положительное сообщение, но курс на самом деле не удаляется из пользовательского объекта.
Кто-нибудь может мне помочь?

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

1. На самом деле ваш вопрос больше касается реализации deployd, но на самом деле вы не показываете этот код в вопросе. Вместо этого вам нужно изменить содержимое вопроса, чтобы показать этот код. Кроме того, не имеет значения, что запрос поступает из Angular, кроме того, это PUT, где API ожидает PUT и любое ожидаемое тело запроса. Однако я настоятельно не рекомендую API раскрывать внутренний синтаксис базы данных. Во всяком случае, путь запроса должен быть примерно таким /users/:id/removeCourse/:courseId , где операция обновления фиксирована в методе, а параметры поступают из URI

2. Тем не менее, «положительное сообщение», вероятно, указывает на то, что либо документ не был сопоставлен, либо не был изменен, и на самом деле это индикаторы того, что параметры неверны. На самом деле id: "123456" это «строка», и вы, похоже, отправляете контент, который, вероятно, интерпретируется как numeric .

3. Спасибо за советы. Честно говоря, до сих пор я всегда пытался манипулировать внутренними элементами базы данных напрямую с помощью угловых запросов http, как я уже показывал ранее. Но, как вы сказали, это не очень хорошая практика. Я не знаю, как манипулировать содержимым базы данных с помощью функций Deployd и передавать параметры функций в URI, как вы говорили мне раньше.

4. Что касается структуры Json, которую я показывал ранее, не могли бы вы показать мне пример этого кода, в котором я могу удалить из базы данных весь курс конкретного пользователя или изменить только некоторые внутренние свойства с помощью функции Deployd и передачи параметров в URI? Большое вам спасибо.