【发布时间】:2015-01-22 06:16:04
【问题描述】:
我正在努力解决一个与以下博客文章中的讨论没有什么不同的问题。这是希望在 Meteor 中发布两个相关的数据集,并在服务器端使用“反应式连接”。
https://www.discovermeteor.com/blog/reactive-joins-in-meteor/
不幸的是,我希望加入的相关集合不会使用“_id”字段加入,而是使用另一个字段加入。通常在 mongo 和流星中,我会创建一个“过滤器”块,我可以在其中指定此查询。但是,据我所知,在 PWR 包中,有一个隐含的假设要加入“_id”。
如果您查看 'publish-with-relations' github 页面上给出的示例(见下文),您可以看到帖子和 cmets 都已加入 Meteor.users '_id' 字段。但是如果我们需要加入 Meteor.users 的“地址”字段呢?
https://github.com/svasva/meteor-publish-with-relations
在短期内,我已将我的查询指定为“颠倒”(幸运的是,我可以在进行反向连接时使用 _id 字段),但我怀疑随着数据集的增长,这将导致查询效率低下,所以宁愿能够按照计划的方向加入。
我们加入的两个集合可以被认为是一个对话主题/标题记录和一个对话消息集合(即集合中的一个条目对应于对话中的每条消息)。
我的解决方案中的对话主题是使用 _id 字段加入,对话消息有一个“conversationKey”字段可以加入。
以下调用有效,但这是从消息到对话的查询,而不是反之亦然,这会更自然。
Meteor.publishWithRelations({
handle: this,
collection: conversationMessages,
filter: { "conversationKey" : requestedKey },
options : {sort: {msgTime: -1}},
mappings: [{
//reverse: true,
key: 'conversationKey',
collection: conversationTopics,
filter: { startTime: { $gt : (new Date().getTime() - aLongTimeAgo ) } },
options: {
sort: { createdAt: -1 }
},
}]
});
【问题讨论】:
-
请在您的问题中添加以下内容:您希望加入的集合的相关架构信息、您希望如何加入它们以及您目前编写的代码。
-
我现在已经做到了。然而,更普遍的问题是,如果连接不在任一侧的“_id”字段上,是否可以这样做。
标签: javascript meteor