【问题标题】:How to add new fields to existing users如何向现有用户添加新字段
【发布时间】:2015-08-11 17:23:57
【问题描述】:

我有一件大事 - 我过去几周一直在开发的流星应用程序终于上线了。但是,为了更新,我需要在我的用户个人资料中添加一个字段。

我认为使用以下代码将方法围起来会起作用:

updateUsrs_ResetHelps: function(){
  if(Meteor.users.update({}, {
    $set: {
      'profile.helps': []
    }
  }))
    console.log("All users profile updated : helps reset");
  else
    throw new Meteor.Error(500, 'Error 500: updateUsrs_ResetHelps', 
      'the update couldn\'t be performed');
}

问题是我的用户拥有经典的 Meteor.accounts 文档,其中包含电子邮件、_id、服务、个人资料等……但是,在个人资料中,他们没有 .helps 字段。我需要创建它。

对于未来的用户,我已经修改了帐户创建功能,在他们注册时添加此字段,但对于我已经注册的 200 个用户,我确实需要一个解决方案。

编辑:可能是因为更新中的选择器?一个简单的 {} 选择器是否可以一次更新集合的所有用户/文档?

【问题讨论】:

    标签: javascript mongodb meteor meteor-accounts


    【解决方案1】:

    来自 Mongo 文档 (http://docs.mongodb.org/manual/reference/method/db.collection.update/):

    默认情况下,update() 方法更新单个文档。设置 多参数更新所有符合查询条件的文档。

    如果您已经为新用户添加了字段,而您只需要修复旧的,为什么不直接在数据库中做一次呢?

    运行meteor 启动您的应用程序,然后运行meteor mongo 连接到数据库。然后在该字段尚不存在的记录上运行更新。比如:

    db.users.update({"profile.helps": {"$exists": false}}, {"$set": {"profile.helps": []}}, {multi:true})
    

    Mongo 文档将 multi 参数指定为:

    可选。如果设置为 true,则更新满足 查询条件。如果设置为 false,则更新一个文档。默认 值为假。

    【讨论】:

    • 好吧,我不知道我能做到这一点,非常感谢,你救了我:) 等待或回答,我通过获取所有用户来欺骗它,并用循环进入他们同时一一更新。所以现在他们都有字段,但我想有一种更快的方法可以全局更改每个文档/用户的值?不过,非常感谢你的提示:)
    • @DavidPanart,我更新了答案以显示使用 multi 参数更新多条记录。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    相关资源
    最近更新 更多