2016-09-19 69 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,并制作一个查询而不是两个不同的查询。