2017-06-20 78 views
0

今天我完成了我网站的功能部分,所以我进入了开发的secure-my-app部分。我只想给用户提供他们相关的内容,所以,对于我的老师(= user.role ==“teacher”)的用户,我只想给他们访问给定的任务,如果他们的_id在_ids的assignment.teachersList数组。我想在发布中进行验证,所以我必须在查询结束时获得一个游标。(mongo)ID数组:我应该怎么做?

OFFICIAL documentation of mongo后,好像做什么,我想应该是简单:

// in a publish 
Assignements.find({ teachersList: this.userId }); 

然而,这总是返回我的不实。首先,我怕一这个方面的问题,我想是这样的:

// in a publish 
let self = this; 
Assignements.find({ teachersList: self.userId }); 

,这不是更好,我还是什么也没得到。我尝试使用Cursor.map()并在那里放置我的条件,但由于map不返回游标,因此我获取数据,但由于我们处于发布状态,因此它无法正常工作。

这是写在文档的第一次尝试我做了应该工作,所以没有怀疑我做了错事,但什么..? 现在,我开始怀疑,如果问题来自于一个事实,即它是_ids的数组。现在,它只是一个字符串数组。而且似乎的方法只返回一个字符串this.userId ....但也许我错了,我应该使用Meteor.Mongo.ObjectId(the_string_id)对象?

好吧,就是这样!请,如果你有任何想法为什么这么简单的查询不起作用,告诉我!谢谢:)

回答

0

teachersList是一个数组,而不是一个ID。你正在努力寻找与一个数组的一个ID值的文件...行不通......

我通常在所有私营业主集合使用此模式:添加一个onInsert事件到我的收藏和然后将用户作为ownerId添加到要插入的文档中。然后,在发布时,我会发布所有具有该用户的ownerId的文档。清洁,简单,没有任何角色甚至需要...

但如果你决定不使用上面的图案......

MongoDB

db.inventory.find({ tags: { $in: [ /^be/, /^st/ ] } })

此查询选择所有文件在库存集合中,tags字段包含至少包含一个以be或st开头的元素的数组。

流星您的查询可能看起来像:

Assignments.find({ownerId: { $in: teachersList}});

+0

谢谢您的回答为好,再次,你的模式是一个相当不错的主意!你教了我一些东西:)我可能会在未来的项目中使用它:) – xababafr

+0

虽然我没有想出那种模式,但是前一段时间在教程的某个地方发现它,尝试过并保留它......如果你是满意答案,它解决了您的问题,请将其标记为避免其他人试图回答的答案。 – Mozfet