2016-03-01 85 views
0

我想在流星使用aldeed:collection2创建一个非常基本的关系。收集undefined当试图建立关系

我有两个集合; BlogsPosts。每篇文章都应该属于一个博客,因此我已将类型的Blogs添加到我的Posts架构中。

Blogs = new Mongo.Collection('blogs'); 
BlogsSchema = new SimpleSchema({ 
    ... 
}); 
Blogs.attachSchema(BlogsSchema); 

Posts = new Mongo.Collection('posts'); 
PostsSchema = new SimpleSchema({ 
    blog: { 
    type: Blogs 
    }, 
    ... 
}); 
Posts.attachSchema(PostsSchema); 

这应该工作,但是,只要重新启动流星,我得到以下错误:

ReferenceError: Blogs is not defined at collections/Posts.js

如何解决这个问题?如果我理解正确,那么这些集合存在一个问题,它们位于单独的文件中。但是,如果我把我的Blogs.js更深(流星负载更深的文件第一次),我得到这个:

RangeError: Maximum call stack size exceeded

+0

我不知道[关系](https://github.com/aldeed/meteor-collection2/blob/master/RELATIONSHIPS.md)是一个完全实现的功能。该文档很久没有更新。 –

+0

我一直在阅读[本期](https://github.com/aldeed/meteor-collection2/issues/246)。显然,你链接的文件只是一个概念,而不是实际的实现。创建关系的唯一方法是使用'_id',然后手动加入。 – ItsGreg

+1

在客户端手动嵌入文档似乎是首选选项,因为只有数据库游标在服务器端响应。参考[this](https://www.discovermeteor.com/blog/reactive-joins-in-meteor/)。 –

回答

0

看一看在GitHub的流星collections2上Relationships的文档。

注意如何在颜色集合到汽车集合引用方括号括起来:

cars: { 
    type: [Cars], 

也许在方括号的关键是解决这一问题为您服务。

+1

方括号意味着一系列博客,这意味着每篇博文都有多个博客,这不是我想要实现的。我已经阅读了文档,你可以看到它也指出一辆车有0或1种颜色,使用'type:Colors'。 – ItsGreg

+0

也许是这样,但总是可以有一个只有一个对象的数组。我建立了一个新的流星项目,并用上面问题中的代码添加了两个文件(blog.js和post.js)。我做的唯一更改是向PostsSchema添加方括号('type:[Blogs]'),并且Meteor启动时没有任何错误。 – thoragio

+0

我想我可以改变周围的关系,并有博客有多个职位。不过,我决定只在帖子中存储博客'_id',然后手动加入关系。我用更多的信息评论了我的问题。 – ItsGreg