我有两个系列。一个称为帖子,另一个称为类别。在帖子集合中,是具有ID的单个帖子。对于此特定帖子,在图片中显示为id: 1291,
,这是一个整数,而不是字符串。
第二个集合是类别集合,其中包含每个帖子所属的类别, 最重要的 ,在每个类别中类别集合是属于该类别的帖子数组。请注意posts.ID
,在这种情况下为ID: 1291,
此ID是帖子集合中的帖子ID
posts
的数组
该类别,但我可以使用帖子对象 我的流程是这样的。
用户滚动类别列表并点击“类别”集合中的某个类别,目的是查看该类别中的帖子。
<template name="category">
{{#each categories}}
<span class="title"><a href="/category/{{_id}}">{{name}}</a></span>
{{/each}}
</template>
目前,当用户执行此操作时,他们会查看属于类别集合的类别中的帖子(记住类别集合中的posts数组)像这样
Template.singleCategory.helpers({
categories() {
var id = FlowRouter.getParam('_id');
return Categories.find({
_id: id
}, {
sort: {
timestamp: 1
},
limit: 100
});
}
});
但是类别集合中的这些帖子没有在帖子集合中找到某些关键对象,而且我想要删除类别中的帖子。< / p>
我不想使用类别集合中的这些帖子,而是想使用帖子集合中的帖子,我想使用他们分享的类似的ID。因此,当用户点击某个类别时,他们应该看到的帖子应来自帖子集合,该集合由类别集合中的post ID
链接,该集合是相同的到帖子集合中的post id
。
这是代码。我想说以下内容:
用户在点击其他类别列表后查看此单一类别时,不会显示类别集合中嵌入的帖子,相反,返回帖子集合。在此帖子集合中,找到每个
post id
,然后将其与类别集合中ID
的{{1}}相匹配,然后展示 来自帖子集合的对象,而不是category.posts
。
category.posts
然而,我似乎无法让它发挥作用。我收到了错误
Template.singleCategory.helpers({
posts(){
return Posts.find({ ID: {$in: this.posts }});
}
});
类别集合中的帖子是一个数组。
我该如何解决这个问题?
在答案部分的代码基础上,我不得不将category.posts视为一个数组。我得到了我想要的结果,在某种程度上,有些帖子没有通过。我想知道,这段代码可以更好吗?
Exception in template helper: Error: $in needs an array
答案 0 :(得分:1)
我要做的是在类别集合中使用一个只包含post mongo的_id字段(这是唯一的)。
然后在帮助程序中,您可以查询帖子集合以返回包含这些ID的所有帖子。
所以它会是这样的:
Template.singleCategory.helpers({
posts(){
var id = FlowRouter.getParam('_id');
var category = Category.findOne(id, {sort: {timestamp: 1},limit: 100 })
var postArray = category.posts
// example --> ["rCBWsKLCAWghBRJg4", "yMDtnDSo43ZDEcqpu", "cQeJntQtvwiHpgdZ9"]
return Posts.find( {_id: {$in: postArray}});
// it will return an array oj objects where each object is a post from the posts collection : [Object, Object, Object]
}
});
有更好的方法可以做到这一点,但我认为这个解决方案可以解决你的问题,而不会改变太多的东西