MongoDB无法将$ addToSet应用于Meteor JS中的非数组

时间:2015-03-05 23:28:01

标签: javascript jquery mongodb meteor

我想制作一系列赞成帖子的用户,允许他们每个帖子只投票一次。我想添加向该阵列投票的用户,以拒绝他们多次点击。但是当我尝试将$ 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);
  }
});

1 个答案:

答案 0 :(得分:1)

您应该查看自己创建的文档。这不是你如何用JSON表示法来表示用于序列化的空数组。你应该做的:

var post = {
  yak: $(e.target).find('[name=yak]').val(),
  submitted: new Date(),
  score: 0,
  users: []
};

因为现在,您的“用户”字段如下所示:

"users" : {  }

或者甚至可能更好,甚至根本没有初始化字段,$addToSet只会为你处理它,并在有新的东西添加时创建元素。

像MongoDB这样的无模式数据存储通常不需要你预先初始化这样的东西。