【问题标题】:MongoDB Cannot apply $addToSet to non-array in Meteor JSMongoDB 无法将 $addToSet 应用于 Meteor JS 中的非数组
【发布时间】:2015-05-07 12:41:50
【问题描述】:

我想创建一个用户数组,他们为帖子点赞,让他们在每个帖子中只点赞一次。我想添加对数组投票的用户,以拒绝他们多次点击。但是当我尝试 $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}});

这是帖子的结构,带有用户数组,

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

【问题讨论】:

    标签: javascript jquery mongodb meteor


    【解决方案1】:

    您应该已经查看了您创建的文档。这不是你如何用 JSON 表示法来表示一个空数组以进行序列化。你应该这样做:

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

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

    "users" : {  }
    

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

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

    【讨论】:

      猜你喜欢
      • 2013-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-29
      • 1970-01-01
      • 2020-08-16
      • 2015-03-12
      相关资源
      最近更新 更多