Meteor, SimpleSchema, meteor-collection2 - Добавление в массив - PullRequest
0 голосов
/ 02 июля 2018

Я определил свою область и шему как:

storageArticles:
{
  type: Array,
  autoValue: function() {
    return [];
  },
  label: 'Articless added to storage.',
},
'storageArticles.$': {
  type: String
}

Когда я пытаюсь обновить это поле с помощью (в моем методе на стороне сервера):

Storages.update(storageId , {$set: { "storageArticles" : articleId }});

Все идет хорошо, но данные не добавляются в массив.

Можете ли вы дать мне несколько советов, чтобы решить эту проблему.

EDIT

Правка добавляет больше деталей по этому вопросу, возможно, здесь моя ошибка.

'articles.articleAddToStorage': function articleAddToStorage(storageId,articleId) {
    check(storageId, String);
    check(articleId, String);

    try {

      Articles.update(articleId, {  $set: {articleAssignedToStorage:true}});
      Storages.update(storageId , {$addToSet: { "storageArticles" : articleId }});

    } catch (exception) {
      handleMethodException(exception);
    }
  }

handleAddToStorage()
  {

    const articleId = this.props.articleId;
    const storageId = this.state.storageId;
    const history = this.props.history;

    if(storageId!="")
    {

      Meteor.call('articles.articleAddToStorage', storageId,articleId, (error) => {

        if (error) {
          Bert.alert(error.reason, 'danger');
        } else {

          Bert.alert("Article assigned to storage", 'success');

        }
      });
    }
    else {
    Bert.alert("Plese select storage", 'warning');

    }
  }

1 Ответ

0 голосов
/ 02 июля 2018

Использование оператора набора полей

с линией

Storages.update(storageId , {$set: { "storageArticles" : articleId }});

вы в основном пытаетесь установить строковое значение (articleId) в поле, которое определяется как массив строк.

Это имеет смысл, только если вы установите массив значений на storageArticles (переопределяя, таким образом, полное поле):

Storages.update(storageId , {$set: { "storageArticles" : [articleId] }});

Использование операторов обновления массива

Если вы хотите сдвинуть или потянуть значения, вы можете поискать операторы обновления массива mongo (перечисляя некоторые примеры здесь):

$ addToSet Добавляет элементы в массив, только если они еще не существуют в наборе.

Storages.update(storageId , {$addToSet: { "storageArticles" : articleId }});

$ pop Удаляет первый или последний элемент массива.

Storages.update(storageId , { $pop : 1 });

$ pull Удаляет все элементы массива, которые соответствуют указанному запросу.

Storages.update(storageId , {$pull: { "storageArticles" : articleId }});

$ push Добавляет элемент в массив.

Storages.update(storageId , {$push: { "storageArticles" : articleId }});

$ pullAll Удаляет все совпадающие значения из массива.

Storages.update(storageId , {$pullAll: { "storageArticles" : [articleId1, articleId2] }});
...