javascript – 在Meteor中如何将查找查询的处理结果作为游标发布?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 在Meteor中如何将查找查询的处理结果作为游标发布?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1805字,纯文字阅读大概需要3分钟。
内容图文
我正在使用Meteor构建一个简单的消息传递应用程序.我正在努力解决未读消息.我想返回一个列表,显示用户名(我不关心这个,请不要关注这个方面,围绕反应性连接/复合等)和来自该用户的最新消息我需要返回的内容,在下面的发布功能中,是最新的未读消息,但显然每个唯一用户ID只有一个.
这样做我试图在我的发布方法中操纵查找查询的结果,但我不清楚如何操纵文档集而不破坏反应性,正如我在下面的代码中所示,这是什么我到目前为止:
Meteor.publish('unreadmessages', function() {
if (!this.userId) {
throw new Meteor.Error('denied', 'not-authorized');
}
var messageQuery, messages, userGroupQuery, userGroups;
var self = this;
var user = Meteor.users.findOne(self.userId);
var userIdArr = [self.userId]; // for use where queries require an array
var contacts = user.contacts;
// get groups
userGroupQuery = Groups.find({
$or : [
{ owner : self.userId },
{ members : self.userId }
]
}, { // Projection to only return the _id field
fields : { _id:1 }
}
);
userGroups = _.pluck(userGroupQuery.fetch(), '_id'); // create an array of id's
messages = Messages.find({
$or : [
{
$and : [
{ participant : self.userId },
{ userId : { $in : contacts } },
{ readBy : { $nin : userIdArr } }
]
},
{
$and : [
{ groupId : { $in : userGroups } },
{ readBy : { $nin : userIdArr } }
]
},
]
});
// TODO : also handle groups here
uniqueMessages = _.uniq(messages.fetch(), function(msg) {
return msg.userId;
});
return uniqueMessages; // obviously an array and not a cursor - meteor errors out.
});
我意识到我的下划线功能当然是使用并确实返回一个数组,而不是我需要的反应光标.我知道一个解决方案是简单地选择消息ID然后在消息上运行另一个.find,但是有另一个/更好/更有效/更自然的方式返回一个我正在寻找的结果集的游标吗?
解决方法:
您可以使用observeChanges并使其成为被动的.在添加的内容中,您可以添加字段.我正在使用这个惊人的包装:meteor-publish-composite,它可以节省您的时间.
使用分页,否则你将无法享受表演.
内容总结
以上是互联网集市为您收集整理的javascript – 在Meteor中如何将查找查询的处理结果作为游标发布?全部内容,希望文章能够帮你解决javascript – 在Meteor中如何将查找查询的处理结果作为游标发布?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。