这应该是流星中一个简单的多对多关系,但我必须遗漏一些东西,因为我无法让它发挥作用。
我有一个名为 reblog 的集合,其中有一个名为descovered
的整数数组,请参阅图像
我有第二个名为帖子的集合,这是一个帖子的集合,这些帖子有一个id。看看第二张图片
我想在帖子和 reblog 集合之间创建多对多的关系。即,我想匹配整数
descovered: 9
id: 9
,以便我只能显示与 reblog 集合匹配的帖子。这当然会允许我显示帖子的标题和其他属性。
这是我的js
Template.reblogging.helpers({
descovered() {
var id = FlowRouter.getParam('_id');
//fetch the reblog collection contents
var rebloged = reblog.find().fetch();
//log below is showing that the fetch is successful because i can see the objects fetched in console
console.log(rebloged);
//create the relationship between the posts collection and the reblog collection
var reblogger = posts.find({
id: {
$in: rebloged
}
}).fetch();
//nothing is showing with the log below, so something is going wrong with the line above?
console.log(reblogger);
return reblogger
}
});
我必须遗漏一些东西,因为这似乎是一件非常简单的事情,但它并不是在担心
我的HTML就像这样
<template name="reblogging">
{{#each descovered }}
<ul class="">
<li>
<h5 class="">{{title.rendered}}</h5>
</li>
</ul>
{{/each}}
</template>
答案 0 :(得分:1)
您不需要转换为字符串和解析,您可以直接在游标上使用.map()
来创建descovered
值的数组。此外,由于您使用Blaze,您只需返回光标而不是数组。我怀疑你还想在你的第一个_id
中使用你的FlowRouter .find()
参数。如果你没有,那么就没有必要在你的助手中得到那个参数。
Template.reblogging.helpers({
descovered() {
const id = FlowRouter.getParam('_id');
const reblogArr = reblog.find(id).map(el => { return el.descovered });
return posts.find({ id: { $in: reblogArr } });
}
);
答案 1 :(得分:0)
事实证明,匹配是准确的,但是,来自reblog
集合的数据需要用REGEX来处理除了我需要的值以外的所有其他内容,然后将它们转换为数组,这是最终的代码。把它留在这里,希望它能帮助将来的某个人。
Template.reblogging.helpers({
descovered() {
var id = FlowRouter.getParam('_id');
//fetch the reblog collection contents
var rebloged = reblog.find().fetch();
//log below is showing that the fetch is successful because i can see the objects fetched in console
console.log(rebloged);
//turn it into a string so i can extract only the ids
var reblogString = JSON.stringify(rebloged).replace(/"(.*?)"/g, '').replace(/:/g, '').replace(/{/g, '').replace(/}/g, '').replace(/,,/g, ',').replace(/^\[,+/g, '').replace(/\]+$/g, '');
//after have extracted what i needed, i make it into an array
var reblogArr = reblogString.split(',').map(function(item) {
return parseInt(item, 10);
});
//create the relationship between the posts collection and the reblog collection
var reblogger = posts.find({
id: {
$in: reblogArr
}
}).fetch();
//nothing is showing with the log below, so something is going wrong with the line above?
console.log(reblogger);
return reblogger
}
});