2016-09-19 63 views
1

有一個集合friends裏面我是用來存儲所有的朋友和具有以下字段

ID,用戶ID,friendid

我有一個集合notes存儲用戶的筆記和具有以下字段

ID,用戶ID,OWNERID,privateorpublic

的規則是,用戶只能看到筆記,他/她已經創造或由他/她的朋友或者是公共

要獲取該信息,我寫我的查詢這樣的筆記上創建的註釋。首先,讓我的朋友的所有ID以逗號分隔。我不知道如何編寫查詢返回逗號分隔值,但此查詢下面我希望會由指定ID返回用戶的所有firneds:

db.friends.find({ { friendid: { userid: 'jhdshh37838gsjj' } } 

再拿到這裏要麼由創建的筆記朋友或是公共筆記或是屬於用戶的筆記

db.notes.find({ownerid:'jhdshh37838gsjj', privateorpublic:'public',{ $in: [ "3ghd8e833", "78hhyaysgd" ] } 

我是MongoDB的新手。我的疑問是否正確?

回答

1

查找查詢語法:db.collection.find({queryFieldName: queryFieldValue}, {requiredFieldName: 1, NotRequiredFieldName: 0})

因此,翻譯的第一個查詢,你會得到「讓我從收集的朋友那裏friendId等於字符串{'userId':'Id'}所有文件」,這是不希望的。

查詢爲「給我的用戶ID jhdshh37838gsjj的所有朋友的ID和不打印任何東西的結果」:db.collection.find({userId:'jhdshh37838gsjj'}, {friendId:1, _id:0})

然而,這會不會給作爲逗號分隔值輸出。你會如下得到輸出(因爲每一個文件是一個獨立的對象):

{friendId: 1} 
{friendId: 2} 

$在需要數組作爲輸入,而不是逗號分隔值。爲了使字段值的數組,在查詢$,你需要一些額外的工作,如:

var friendIdsArr = [] //Initiate an array to store friend Ids 
db.friends.find({'userId':'jhdshh37838gsjj'},{'friendId':1,'_id':0}).forEach(function(x) {friendIdsArr.push(x.friendId);}); //Foreach result in query, push value to array. 

friendIdsArr[1,2]

db.notes.find({'ownerId':'jhdshh37838gsjj', 'privateOrPublic':'public',{$in: ["friendId": friendIdsArr]}) 會給結果,JSON文件,符合一定條件。

有趣的是,您的notes系列沒有note字段。

我建議您閱讀mongodb official documentation,並製作一個查詢而不是兩個不同的查詢。