【问题标题】:Meteor.js dealing with a MongoDB object and saving changesMeteor.js 处理 MongoDB 对象并保存更改
【发布时间】:2016-08-26 22:38:26
【问题描述】:

我在流星上使用以下代码:

            var game = Games.findOne({_id:gameId});
            if(game.status == 'waiting'){
                game.status == 'canceled';
            }

基本上我是从集合中获取一个对象,对其进行一些更改,现在我想将它保存到数据库中,该怎么做?有没有类似 .save() 的方法?

我来自 PHP,所以我可能完全没有抓住重点,但在 Laravel 中,我可以从数据库中获取,处理对象,完成后只需在数据库中更新它。我可以在流星中使用相同的工作流程吗?怎么样?

【问题讨论】:

  • 顺便说一句,您可能想在game.status == 'canceled'; 中使用= 而不是==

标签: javascript mongodb meteor


【解决方案1】:

你需要使用update方法。

代码应该是这样的:

var game = Games.findOne({_id:gameId});

if(game.status == 'waiting'){
      Games.update({_id:gameId},{$set : {status: 'canceled'}});
}

警告:这仅在仍包含insecure 包时在客户端有效。您应该在生产中调用数据库上的 CRUD 操作方法。

【讨论】:

    【解决方案2】:

    处理完对象后,您可以像这样保存它

    var game = Games.findOne({_id:gameId});
    
    if (game.status == 'waiting') {
        game.status = 'canceled';
    }
    
    // .. change more stuff in `game`
    
    Games.update({_id: game._id}, {$set: game});
    


    这和Ankit's answer 的区别在于,在我的版本中,整个对象都得到了更新,而在 Ankit 中只有status。如果您只打算更新一个参数,那么使用他的方式可能会更好,否则我会。

    【讨论】:

      【解决方案3】:

      正如其他人回答的那样,流星集合没有您期望的工作流程,但是有一个名为 astronomy 的 ORM 包可以按照您想要的方式进行操作,因此如果您尝试一下,可能会更有效率(@ 987654321@)

      var game = Games.findOne({_id:gameId});
      if(game.status == 'waiting'){
         game.status = 'canceled';
      }
      game.save()
      

      【讨论】:

        猜你喜欢
        • 2018-08-21
        • 1970-01-01
        • 1970-01-01
        • 2020-10-17
        • 2011-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多