Meteor:反应式更新,级联 delete/update。规范化与反规范化
Meteor: Reactive update, cascaded delete/update. Normalizing vs Denormalizing
如何在已加入的文档中进行级联删除、更新和反应更新?例如,我加入 Posts
collection 与 Meteor.users
collection 和 userId()
作为作者。我可以在 Posts
collection 上执行转换功能以获取作者的用户数据,例如 username
并在任何 post 上显示作者的 username
。问题是当用户更改 his/her username
时,现有的 post 不会反应性地更新作者的 username
。当您删除 parent 个文件时,child 个文件仍然存在。我使用了 publish-composite
和 collection-helpers
等流行的智能包,但问题仍然存在。任何专家流星开发人员都可以帮助我吗?谢谢。
如果您想使用 collection-hooks 来解决这个问题,下面的伪代码应该可以帮助您:
// run only on the server where we have access to the complete dataset
if (Meteor.isServer) {
Meteor.users.after.update(function (userId, doc, fieldNames, modifier, options) {
var oldUsername = this.previous.username;
var newUsername = doc.username;
// don't bother running this hook if username has not changed
if (oldUsername !== newUsername) {
Posts.update({
// find the user and make sure you don't overselect those that have already been updated
author: userId,
authorUsername: oldUsername
}, {$set: {
// set the new username
authorUsername: newUsername
}}, {
// update all documents that match
multi: true
})
}
}, {fetchPrevious: true});
}
如何在已加入的文档中进行级联删除、更新和反应更新?例如,我加入 Posts
collection 与 Meteor.users
collection 和 userId()
作为作者。我可以在 Posts
collection 上执行转换功能以获取作者的用户数据,例如 username
并在任何 post 上显示作者的 username
。问题是当用户更改 his/her username
时,现有的 post 不会反应性地更新作者的 username
。当您删除 parent 个文件时,child 个文件仍然存在。我使用了 publish-composite
和 collection-helpers
等流行的智能包,但问题仍然存在。任何专家流星开发人员都可以帮助我吗?谢谢。
如果您想使用 collection-hooks 来解决这个问题,下面的伪代码应该可以帮助您:
// run only on the server where we have access to the complete dataset
if (Meteor.isServer) {
Meteor.users.after.update(function (userId, doc, fieldNames, modifier, options) {
var oldUsername = this.previous.username;
var newUsername = doc.username;
// don't bother running this hook if username has not changed
if (oldUsername !== newUsername) {
Posts.update({
// find the user and make sure you don't overselect those that have already been updated
author: userId,
authorUsername: oldUsername
}, {$set: {
// set the new username
authorUsername: newUsername
}}, {
// update all documents that match
multi: true
})
}
}, {fetchPrevious: true});
}