【发布时间】:2017-09-17 14:54:24
【问题描述】:
我有两个系列。一种称为帖子,另一种称为类别。在 Posts 集合中,是具有 id 的单个帖子。对于这个特定的帖子,在图片中显示为id: 1291,,它是一个整数,而不是一个字符串。
第二个集合是 Categories 集合,其中包含每个帖子所属的类别,最重要的是,在类别集合是属于该类别的帖子数组。注意posts.ID,在这种情况下是ID: 1291, 这个ID是Posts集合中的post id
夏天。
- 有一个帖子集合,其中包含个人个帖子。那些 个别帖子属于不同的类别。
- 还有 Categories 集合,其中包含各个类别。
在每个类别中都有一个 array 的
posts属于 该类别,但我可以使用的帖子对象很少。
问题
我的流程是这样的。
用户滚动类别列表并单击类别集合中的类别,目的是查看该类别中的帖子。
<template name="category">
{{#each categories}}
<span class="title"><a href="/category/{{_id}}">{{name}}</a></span>
{{/each}}
</template>
就目前而言,当用户执行此操作时,他们会查看属于 Categories 集合的类别中的帖子(请记住类别集合中的帖子数组 em>) 像这样
Template.singleCategory.helpers({
categories() {
var id = FlowRouter.getParam('_id');
return Categories.find({
_id: id
}, {
sort: {
timestamp: 1
},
limit: 100
});
}
});
但是 Categories 集合中的这些帖子没有 Posts 集合中的某些关键对象,而且我想摆脱类别中的帖子。
目标
我不想使用 Categories 集合中的这些帖子,而是使用 Posts 集合中的帖子,并且我想使用他们共享的相似 ID。因此,当用户点击一个类别时,他们应该看到的帖子应该来自 Posts 集合,由 Categories 集合中的 post ID 链接,与帖子集合中的post id。
代码
这里是代码。我想说的是:
在用户从其他类别列表中单击后查看的单个类别中,不显示嵌入在 类别 集合中的帖子,相反,返回 Posts 集合。在这个 Posts 集合中,找到每个
post id,然后将其与 Categories 集合中category.posts中的ID匹配,然后显示 Posts 集合中的对象,而不是category.posts。
Template.singleCategory.helpers({
posts(){
return Posts.find({ ID: {$in: this.posts }});
}
});
但是,我似乎无法让它工作。我收到了错误
Exception in template helper: Error: $in needs an array
类别集合中的帖子是一个数组。
我该如何解决这个问题?
已编辑
基于答案部分中的代码,我必须将 category.posts 视为一个数组。我得到了我想要的结果,嗯,在某种程度上,有些帖子没有通过。我想知道,这段代码会更好吗?
Template.Category.helpers({
categories(){
var id = FlowRouter.getParam('_id');
//create a variable with the correct category by id
var category = Category.findOne(id, {
sort: {
timestamp: 1
},
limit: 100
});
console.log(category);
//target ID within posts
var postArray = category.posts;
console.log(postArray);
//treat the object, clean it up to prepare it for becoming an array
var postArrayStr = JSON.stringify(postArray).replace(/ID/g, '').replace(/\[|\]/g, '').replace(/""/g, '').replace(/:/g, '').replace(/\{|\}/gi, '');
//create an array
var idsArray = postArrayStr.split(',').map(function(item) {
return parseInt(item, 10);
});
//match it to posts id
var matchi = Posts.find({
id: {
$in: idsArray
}
}).fetch();
//
console.log(matchi);
//return it
return matchi;
}
});
【问题讨论】:
-
您可能应该首先调试您的代码并确保
this.posts确实是您认为的那样。 -
一个帖子可以属于多个类别吗?
-
一个帖子可以属于多个类别
标签: javascript mongodb meteor meteor-blaze