【问题标题】:Insert / update in a mongodb array via meteor通过流星在 mongodb 数组中插入/更新
【发布时间】:2015-03-27 01:20:56
【问题描述】:

我尝试从流星应用程序中保存 mongodb 中每个用户的投票结果。好几个小时我都没有成功。这是我所拥有的:

一个mongodb集合决定: 决定._id 决策投票[]

一开始一切都是空的。

在应用程序中我生成结果并在服务器上调用:

'updDecisionVote':function(id,userid,votum){
    Decision.update({_id:id,votes:[{user:userid,vote:votum}]});
}

但我经常收到错误 500 并且没有更多信息。如果是更新,我读到如果记录不存在,则会创建记录。

所以我很难插入。另一个有趣的问题是:此更新更新了决策记录。但是如果用户想改变他的投票,上面的更新会覆盖这个还是会有更多的记录?

【问题讨论】:

    标签: arrays mongodb meteor


    【解决方案1】:

    500 错误表示服务器出错,但服务器不知道原因。

    所以让我们将 Meteor.method 更改为如下所示(在客户端执行所有逻辑)

    'updDecisionVote':function(id,userid,votum){
        Decision.update(id,userId,votum);
    }
    

    还可以在Meteor.call 上使用回调来获取有关错误的更多信息(如果存在),就像这样(使用$push 运算符)

    Meteor.call('upDecisionVote',this._id,{$push:{user:userId,vote:votum}},function(err,result){
      if(err){
        console.log(err.reason)
      }else{
       console.log("Vote Done")
      }
    })
    

    顺便说一句,为什么不在客户端这样做?并创建正确的allow/deny 规则?

     Decision.update(this._id,{$push:{user:userId,vote:votum}});
    

    【讨论】:

    • 非常感谢!我用你的例子来进一步学习。由于我不是很有经验,所以我采取了非常务实的方法。我已经建立了一个新的集合“投票”,我在其中放置了所有范围信息,并添加了一个 decisionID 字段以获取参考。这更多是关系方式,但考虑规范化这可能不是最糟糕的方式。接下来要学习 mongo 模式设计和查询语言。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    相关资源
    最近更新 更多