我想制作一系列赞成帖子的用户,允许他们每个帖子只投票一次。我想添加向该阵列投票的用户,以拒绝他们多次点击。但是当我尝试将$ addToSet添加到数组时,我得到的MongoDB无法将$ addToSet修饰符应用于非数组。
'click a.yes': function(event) {
if (Meteor.user()) {
event.preventDefault();
var postId = Session.get('selected_post');
Posts.update(postId, {$addToSet: {users: Meteor.user()}});
Posts.update(postId, {$inc: {'score' : 1}});
这是帖子的结构,带有users数组,
Template.postSubmit.events({
'submit form': function(e) {
e.preventDefault();
var post = {
yak: $(e.target).find('[name=yak]').val(),
submitted: new Date(),
score: 0,
users: ({})
};
post._id = Posts.insert(post);
Router.go('postsList', post);
}
});
答案 0 :(得分:1)
您应该查看自己创建的文档。这不是你如何用JSON表示法来表示用于序列化的空数组。你应该做的:
var post = {
yak: $(e.target).find('[name=yak]').val(),
submitted: new Date(),
score: 0,
users: []
};
因为现在,您的“用户”字段如下所示:
"users" : { }
或者甚至可能更好,甚至根本没有初始化字段,$addToSet
只会为你处理它,并在有新的东西添加时创建元素。
像MongoDB这样的无模式数据存储通常不需要你预先初始化这样的东西。