Удаление встроенного объекта в массиве при ошибке метеора

Я исследовал и видел вопросы о том, как удалить встроенные документы в mongodb/meteor здесь, в stackoverflow и на форумах метеоров. Но я не могу понять, почему у меня не работает $pull.

Застрял в этой проблеме в течение нескольких дней. У меня есть такая коллекция.

{
  "_id": "N6QAJQpq4p5aYbpev",
  "name": "Test Project",
  "description": "description here",
  "organization": "xPtaobSBQwxCKAJLN",
  "members": [
    {
      "id": "3b7sbW3x487PzzJ6h",
      "role": "manager",
      "dateAdded": "2018-01-24T17:49:50.734Z"
    },
    {
      "id": "n72PveQmdjcsvv5t5",
      "role": "manager",
      "dateAdded": "2018-01-24T17:49:53.545Z"
    },
    {
      "id": "dSqzezqQjrzLeSTEw",
      "role": "manager",
      "dateAdded": "2018-01-24T17:50:11.177Z"
    }
  ]
}`

мой метод обновления записи:

removeUserFromProj: (projId, memberId) =>{
  Projects.update({ _id: projId }, {
     $pull: { "members": { id: memberId } }
     // $pull: { "members.id":  memberId  }
  },
     function (error, success) {
        if (error) {
           console.log('error: ', error);
        }
        if (success) {
           console.log('updating user role: ' + success);
        }
     });

}

функция обратного вызова дает мне успех

введите здесь описание изображения

но коллекция не обновляется.

Если я использую этот синтаксис // $pull: { "members.id": memberId }, это дает мне эту ошибку:

simulating the effect of invoking 'removeUserFromProj' Error: After filtering out keys not in the schema, your modifier is now empty

Я также пытался использовать $pop вместо $pull. Он удаляет последнюю запись в моей коллекции.

введите здесь описание изображения

Я использую метеор SimpleSchema.


person dens14345    schedule 24.01.2018    source источник
comment
можете ли вы поделиться частью схемы, описывающей массив членов, чтобы мы могли попытаться воспроизвести?   -  person Victor    schedule 25.01.2018
comment
Кажется, вы не указали optionnal: true в своей схеме. Я попробовал $pull, и он работает правильно. Имитация эффекта вызова «removeUserFromProj». Ошибка: после фильтрации ключей, отсутствующих в схеме, ваш модификатор теперь пуст. Ошибка сообщает вам, что при извлечении последнего элемента ваш ключ исчезнет из документа, что означает, что он не будет включен схема больше   -  person Rolljee    schedule 25.01.2018
comment
Спасибо за попытку помочь мне.   -  person dens14345    schedule 26.01.2018
comment
@Rolljee Спасибо, что указали мне на эту ошибку. Нашел проблему, поставил ответ на свой вопрос.   -  person dens14345    schedule 26.01.2018


Ответы (1)


Нашел свой баг. Похоже, что свойство autoValue в моей схеме не позволяет мне обновить мой

OrganizationSchema = new SimpleSchema({
       name: {
          type: String,
          label: "Organization Name"
       },
       createdAt: {
          type: Date,
          autoValue: function(){
             return new Date()
          }  
       },
       createdBy:{
          type: String
       },
       members: {
          type: [Member],
          optional: true
       }
    });

изменение свойства autoValue на

createdAt: {
   type: Date,
   autoValue: function(){
             return new Date()
   }  
}

defaultProperty Решил мою проблему:

createdAt: {
      type: Date,
      defaultValue:  new Date()
   },
person dens14345    schedule 26.01.2018