gpt4 book ai didi

javascript - 如何使用 MongoDB/Meteor 处理 "relations"

转载 作者:可可西里 更新时间:2023-11-01 10:03:45 28 4
gpt4 key购买 nike

我仍在使用我的 Meteor.js 应用程序,我想在我的页面上显示当前用户 friend 的所有帖子。

目前,我只是像这样显示每个帖子:

talkthreads: function(){
return Posts.find({parent: null},{sort: {date: -1}});
}

但我想做一些尽可能简单/高效的事情来过滤它们,并且只从用户的 friend 那里得到一个。

类似的东西:

talkthreads: function(){
return Posts.find({parent: null, owner: [match one of my friend id]}, {sort: {date: -1}});
}

就像我对 SQL 所做的那样。

另一点是我目前向所有客户发布我的帖子集。但由于它旨在与时俱进,我不想将所有帖子发布给每个客户。

我如何才能只发布和订阅我或我的 friend 拥有的帖子,并且数量有限:我不想一次加载超过 15 个最后的帖子。当我点击一个按钮时,我又加载了 15 个(就像在 FB 上,当你滚动到页面底部时,它会自动附加较旧的帖子)。

谢谢你的帮助。

最佳答案

您要求的是客户端连接。假设 Meteor.user().profile.friends 是一个用户 ID 数组,像这样的东西应该在你的助手中工作:

talkthreads: function() {
// select owners who are friends of the current user
// see the publish example if you want to include your own posts
var owners = Meteor.user().profile.friends || [];

var selector = {
parent: null,
owner: {$in: owners}
};

return Posts.find(selector, {sort: {date: -1}});
}

你问题的后半部分是关于分页的。这可能最好作为一个单独的问题提出,但这里有一个关于如何设置发布者的想法:

var POSTS_PER_PAGE = 15;

Meteor.publish('paginatedPosts', function(pageNumber) {
// fetch the current user because Meteor.user() isn't available here
var user = Meteor.findOne(this.userId);

// get an array of user ids for the user's friends
var owners = user.profile.friends || [];

// also add the current userId to the list of owners
owners.push(this.userId);

var selector = {
parent: null,
owner: {$in: owners}
};

// publish a limited set of posts based on the current page
var options = {
limit: POSTS_PER_PAGE * pageNumber,
sort: {date: -1}
};

return Posts.find(selector, options);
});

在客户端上,您需要跟踪当前页面(从 1 开始,每次他/她单击“加载更多”按钮时递增)并在页码更改时激活订阅。例如:

Tracker.autorun(function() {
var pageNumber = Session.get('currentPage') || 1;
Meteor.subscribe('paginatedPosts', pageNumber);
});

当然,这可以是模板自动运行、全局或在您的路由器中,具体取决于您的应用程序的意义。

关于javascript - 如何使用 MongoDB/Meteor 处理 "relations",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30152869/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com