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

MongoDB Cannot apply $addToSet to non-array in Meteor JS

我想创建一个用户数组,这些用户已投票 post,以允许他们每个 post 只投票一次。我想将投票的用户添加到数组中,以拒绝他们多次点击。但是当我尝试 $addToSet 到数组时,我得到 MongoDB cannot apply $addToSet modifier to non-array.

'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}});

这是 post 的结构,其中包含用户数组

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

您应该已经查看了您创建的文档。这不是您在 JSON 表示法中标记用于序列化的空数组的方式。你应该做的:

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

因为现在,您的 "users" 字段如下所示:

"users" : {  }

或者可能更好,但甚至根本不初始化字段,$addToSet 会为您处理并在有新内容要添加时创建元素。

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