在 Meteor 中对发布、订阅和数据进行过滤和排序
Filter and sort in publish, subscribe, and data in Meteor
我正在列出属于
用户的所有通知
this.route('notifications', {
path: '/notifications',
template: 'notificationList',
waitOn: function() {
return Meteor.subscribe('notifications');
},
data: function() {
return Notifications.find(
{userId: Meteor.userId()},
{sort: {createdAt: -1}}
);
},
fastRender: true
});
我正在发布文档
Meteor.publish("notifications", function () {
return Notifications.find(
{userId: this.userId},
{sort: {createdAt: -1}}
);
});
我很困惑在哪里做什么。我是否必须在 Meteor.publish()
和 data: ...
中过滤用户 ID?我必须对这两个函数进行排序吗?我看到也可以在 Meteor.subscribe()
.
中进行排序和过滤
三个函数都做几乎相同的事情似乎有点多余。我做得对吗?
调用 Meteor.publish 时,通常需要进行排序,以便在应用限制时发送正确的文档。例如,如果您只要求 10 个项目,那么您需要先对它们进行排序,以确保您拥有正确 10 个项目而不是 10 个随机结果。
客户端的排序顺序与服务器的发布请求的排序顺序没有任何关系,并且不能保证它们会相同。例如,考虑有 multiple 发布请求发布到客户端上的 same 集合,每个请求都有不同的排序顺序。不可能以有用的方式对这些结果进行预排序。
因此,您通常还需要在客户端访问集合时请求对项目进行排序。排序不必与服务器上的排序相同(尽管通常是这样)。
至于Meteor.subscribe,您传递的参数取决于发布函数的参数,因此您可以让您的客户端将排序顺序传递给发布函数。当您需要根据排序顺序具有相同的发布功能 return 不同的结果时,这很有用。此外,如果用于订阅和提供数据上下文的代码在同一个路由控制器中,那么您可以让一个变量保存排序条件,从而减少代码重复和潜在的错误。
我正在列出属于
用户的所有通知this.route('notifications', {
path: '/notifications',
template: 'notificationList',
waitOn: function() {
return Meteor.subscribe('notifications');
},
data: function() {
return Notifications.find(
{userId: Meteor.userId()},
{sort: {createdAt: -1}}
);
},
fastRender: true
});
我正在发布文档
Meteor.publish("notifications", function () {
return Notifications.find(
{userId: this.userId},
{sort: {createdAt: -1}}
);
});
我很困惑在哪里做什么。我是否必须在 Meteor.publish()
和 data: ...
中过滤用户 ID?我必须对这两个函数进行排序吗?我看到也可以在 Meteor.subscribe()
.
三个函数都做几乎相同的事情似乎有点多余。我做得对吗?
调用 Meteor.publish 时,通常需要进行排序,以便在应用限制时发送正确的文档。例如,如果您只要求 10 个项目,那么您需要先对它们进行排序,以确保您拥有正确 10 个项目而不是 10 个随机结果。
客户端的排序顺序与服务器的发布请求的排序顺序没有任何关系,并且不能保证它们会相同。例如,考虑有 multiple 发布请求发布到客户端上的 same 集合,每个请求都有不同的排序顺序。不可能以有用的方式对这些结果进行预排序。
因此,您通常还需要在客户端访问集合时请求对项目进行排序。排序不必与服务器上的排序相同(尽管通常是这样)。
至于Meteor.subscribe,您传递的参数取决于发布函数的参数,因此您可以让您的客户端将排序顺序传递给发布函数。当您需要根据排序顺序具有相同的发布功能 return 不同的结果时,这很有用。此外,如果用于订阅和提供数据上下文的代码在同一个路由控制器中,那么您可以让一个变量保存排序条件,从而减少代码重复和潜在的错误。