Javascript Meteor:如何将项目推送到用户集合并创建列表或数组,而不是用新项目替换每个项目?

Javascript Meteor:如何将项目推送到用户集合并创建列表或数组,而不是用新项目替换每个项目?,javascript,arrays,json,mongodb,meteor,Javascript,Arrays,Json,Mongodb,Meteor,我正在尝试通过单击事件将其他集合中的对象附加到Meteor.user集合。我有一个集合,其中有一个名为“categories”的项目列表,每个类别都有一个名称字段,我想将该名称输入meteor.user 它的工作方式应该是用户可以推送任意多个名称,但是它只接受一个条目,当我单击另一个名称时,新名称将替换旧名称,而不是数组。我如何才能使它允许许多条目 client/users.js Template.CategoriesMain.events({ 'click .toggle-category

我正在尝试通过单击事件将其他集合中的对象附加到Meteor.user集合。我有一个集合,其中有一个名为“categories”的项目列表,每个类别都有一个名称字段,我想将该名称输入meteor.user

它的工作方式应该是用户可以推送任意多个名称,但是它只接受一个条目,当我单击另一个名称时,新名称将替换旧名称,而不是数组。我如何才能使它允许许多条目

client/users.js

Template.CategoriesMain.events({
  'click .toggle-category': function(e){
          //var id = $(e.target).attr('posts.name');
          var id = $(e.target).parent().find("a").text();
          console.log(id);

          e.preventDefault();
          Meteor.call('addingCategory', id, function(error, user){ console.log(id)});
      }
});
server/users.js

Meteor.methods({
    addingCategory: function(name) {

      var cats = [{}];
      cats.push(name);
        console.log(Meteor.userId());
        Meteor.users.update({
      _id: Meteor.userId()
    }, {
      $set: {

        name: name
      }
    });
    }
});
这是db.user.find()中的用户,您可以通过

“名称”:“a-reece”

这显然是在推陈出新,但我不能补充更多,我只能替换

{“_id”:“4CHcZjSD4hCrqweGA”,“createdAt”: ISODate(“2016-07-13T21:38:59.505Z”),“服务”:{“密码”:{ “bcrypt”: “$2a$10$LKZTRYSMD4EGPJ6EAMGFDIPZ41JW52DGIVBLY3LUYWBGDTFZBG1X.”, “resume”:{“loginTokens”:[{“when”: ISODate(“2016-07-13T21:38:59.719Z”),“哈希表”: “BsqTGedB2FkmSPO3+5I31rOM2+MPtF97Zc9tRQ4pf8Y=“}]}”,电子邮件:[{ “地址”:mun@les.com“,“已验证”:false}],“角色”:[ “发现者”、“是”]、“isAdmin”:真、“姓名”:“a-reece”}

如何添加更多名称而不是替换

编辑

答复


您当前正在执行以下操作:

Meteor.users.update({ _id: Meteor.userId() }, { $set: { name: name } });
您有两种选择:
$push
$addToSet

Meteor.users.update({ _id: Meteor.userId() }, { $push: { name: name } });

前者推送到数组上,允许重复,后者避免重复

您不需要:

var cats = [{}];
cats.push(name);

您当前正在执行以下操作:

Meteor.users.update({ _id: Meteor.userId() }, { $set: { name: name } });
您有两种选择:
$push
$addToSet

Meteor.users.update({ _id: Meteor.userId() }, { $push: { name: name } });

前者推送到数组上,允许重复,后者避免重复

您不需要:

var cats = [{}];
cats.push(name);

感谢您的回复@MichelFloyd。当我使用£addToSet时,我得到以下错误$addToSet到非数组字段。名为“name”的字段在文档中有一个非数组类型的字符串_id:这是因为您以前已将该字段设置为字符串而不是数组。你必须先
$unset
任何这样的字段。你是说在方法中?请看我在问题底部的编辑。我是这样做的,但是控制台和终端中都没有错误,但是没有向用户添加任何内容。请告知@MichelFloyd您不能在同一更新语句中取消设置和添加设置。因为您已经在数据库中植入了非数组元素,所以应该先将它们转换为数组(一次性操作),然后再使用$addToSet。是的,谢谢。我先把它做成一个数组,然后我做了$addToset。成功了。感谢您的帮助,谢谢您的回复。当我使用£addToSet时,我得到以下错误$addToSet到非数组字段。名为“name”的字段在文档中有一个非数组类型的字符串_id:这是因为您以前已将该字段设置为字符串而不是数组。你必须先
$unset
任何这样的字段。你是说在方法中?请看我在问题底部的编辑。我是这样做的,但是控制台和终端中都没有错误,但是没有向用户添加任何内容。请告知@MichelFloyd您不能在同一更新语句中取消设置和添加设置。因为您已经在数据库中植入了非数组元素,所以应该先将它们转换为数组(一次性操作),然后再使用$addToSet。是的,谢谢。我先把它做成一个数组,然后我做了$addToset。成功了。我感谢你的帮助@MichelFloyd