2017-06-20 127 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