流星,SimpleSchema,流星集合2-添加到数组

时间:2018-07-02 19:47:30

标签: meteor simple-schema meteor-collection2

我将归档和shema定义为:

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

当我尝试使用(在服务器端方法中)更新此字段时:

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

一切正常,但是没有将数据添加到数组。

能给我一些指导来解决这个问题吗?

编辑

编辑为此问题添加了更多详细信息,也许这是我的错误。

'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 :(得分:3)

使用字段集运算符

一行

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

基本上,您尝试将字符串值(articleId)set到定义为字符串数组的字段中。

仅当您将值数组设置为storageArticles(从而覆盖整个字段)时,这才有意义:

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

使用数组更新运算符

如果要推入或拉出值,可以寻找mongo array update operators(在此处列出一些示例):

  

$ 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] }});