如何部分更新meteor.users.profile?

Posted

技术标签:

【中文标题】如何部分更新meteor.users.profile?【英文标题】:How to partly update meteor.users.profile? 【发布时间】:2015-05-14 18:57:51 【问题描述】:

我已经使用模块 accounts-ui 启动了一个基于流星样板的 min 应用程序。

有一个创建呼叫用户的集合,其中一个元素是配置文件,这又有一个名为“name”的元素,它获取登录名。

在此测试应用中提供了更新用户个人资料的选项。更新的数据来自表单提交。我在这里附上了事件监听器

Template.profile.events(
  'submit form': function(event) 
    event.preventDefault();
    var data = SimpleForm.processForm(event.target);
    Meteor.users.update(Meteor.userId(), $set: profile: data);
  
);

所以数据包含表单中的所有内容。登录名“名称”不包含在表单中,因此也不包含在数据中。

在更新之前我有 users.profile.name -> 包含数据 更新后我有 users.profile.* -> * 等于表单中的所有内容,但“名称”消失了。

最后:我可以保留谁的 profile.name 字段?最后,我喜欢在 users.profile 中包含来自 PLUS 的“名称”字段。

感谢您的任何提示,因为您阅读了我是流星新手 - 并尝试了解事物如何联系在一起。

迈克尔

【问题讨论】:

Update meteor collection without removing or overriding existing fields的可能重复 【参考方案1】:

您可以在更新要更改的部分时轻松保留旧的配置文件数据,如下所示:

Meteor.users.update(id, $set: "profile.someNewField": newData);

确保“profile.someNewField”在引号中。

【讨论】:

【参考方案2】:

您正在用您的数据对象替换整个现有的配置文件对象,因此之前存在的所有内容(包括名称键)都将被清除。

如果名称是您想要保留的配置文件中唯一的内容,只需将其添加到您的数据对象中,并使用其自己的密钥。这样,您放置在配置文件下的新对象将具有与旧对象等效的名称字段。

var data = SimpleForm.processForm(event.target);
data.name = Meteor.user().profile.name;
Meteor.users.update(Meteor.userId(), $set: profile: data);

【讨论】:

谢谢,正是我想要的。 @Quin 的回答是一个不错的简单解决方案 Meteor.users.update(id, $set: "profile.someNewField": newData);

以上是关于如何部分更新meteor.users.profile?的主要内容,如果未能解决你的问题,请参考以下文章

react如何更新DOM的一部分?

如何通过 JSON API 实现复杂的条件批量部分更新?

如何根据 UICollectionView 的部分以编程方式更新标签

如何部分更新meteor.users.profile?

如何在 discord.js 中使用审核日志的成员角色更新部分

如何不断更新页面的一部分