我有一个集合friends
,我用来存储所有朋友,并有以下字段
id,userid,friendid
我有一个用于存储用户注释的集合notes
,其中包含以下字段
id,userid,ownerid,privateorpublic
规则是用户只能看到他/她创建的笔记或他/她的朋友创建的笔记或公开笔记
要获取该信息,我会以这种方式编写查询。首先,用逗号分隔我朋友的所有id。我不知道如何编写查询以返回逗号分隔值,但下面的这个查询我希望将返回给定id的用户的所有内容:
db.friends.find({ { friendid: { userid: 'jhdshh37838gsjj' } }
然后获取由朋友创建的笔记或公共笔记或属于用户的笔记
db.notes.find({ownerid:'jhdshh37838gsjj', privateorpublic:'public',{ $in: [ "3ghd8e833", "78hhyaysgd" ] }
我是MongoDB的新手。我的查询是对的吗?
答案 0 :(得分:1)
查找查询语法:db.collection.find({queryFieldName: queryFieldValue}, {requiredFieldName: 1, NotRequiredFieldName: 0})
因此,翻译第一个查询,您就可以从收集朋友那里获取所有文件,其中friendId等于字符串{'userId':'Id'}
"这是不可取的。
查询"给我所有朋友的idid用户ID jhdshh37838gsjj并且不要在结果中打印任何其他内容" :db.collection.find({userId:'jhdshh37838gsjj'}, {friendId:1, _id:0})
但是,这并不以逗号分隔值的形式给出输出。您将获得如下输出(因为每个文档都是一个独立的对象):
{friendId: 1}
{friendId: 2}
$ in需要数组作为输入而不是逗号分隔值。要为$ in查询创建字段值数组,您需要执行一些额外的工作,如:
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并进行单个查询,而不是两个不同的查询。