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