如何find节点和mongodb?

这是我的“用户组”数据

{ "_id": { "$oid": "58f7537ec422895572e988a1" }, "name": "aaa", "groupname": "group north,group south", "mobilenumber": "0509867865", "userid": "6035555c16" } 

这里是我的“群组”收集数据

 { "_id": { "$oid": "58e5eb3c035555c33f979daf" }, "groupname": "group north", "message": [ { "val": "hai how are you", "key": "1" }, { "val": "i am fine", "key": "2" } ] }, { "_id": { "$oid": "3c035555c33f979daf58e5eb" }, "groupname": "group south", "message": [ { "val": "testing", "key": "1" } ] }, { "_id": { "$oid": "55c3c035533f979f58e5ebda" }, "groupname": "group east", "message": [ { "val": "where are you from", "key": "1" } ] } 

在用户组我试图得到基于mobilenumbermobilenumber ,我有两个组: group northgroup south 。 获取组名后,我需要获取消息。 我怎么写这个来find这个条件。 我的目标是向用户发送group north, group south消息。

 Usergroup.findOne({ mobilenumber: 0509867865 }, function(err, usergroup) { if (err) { return handleError(res, err); } if (!usergroup) { return res.status(404).send('Not Found'); } console.log(usergroup.groupname); //group north ,group south Group.find({ groupname: }, function(err, group) { if (err) { return handleError(res, err); } return res.json(group); }); }); 

您可以使用$in运算符:

 Usergroup.findOne({ mobilenumber: 0509867865 }, function(err, usergroup) { if (err) { return handleError(res, err); } if (!usergroup) { return res.status(404).send('Not Found'); } console.log(usergroup.groupname); //group north ,group south Group.find({ groupname: { $in: usergroup.groupname.split(",") } }, function(err, group) { if (err) { return handleError(res, err); } return res.json(group); }); }); 

您可以使用下面的3.4版本的聚合。

查询将$match usergroups集合$match文档与移动编号相mobilenumber后跟$split将分组名称分组,并$lookup messages groups集合中的groups 。 最后一步是$unwind mobile_group数组,以$project为每个组名mobile_group messages

 db.usergroups.aggregate([ { $match: { mobilenumber:"0509867865" } }, { $project: { groupname:{ $split: [ "$groupname", ',' ] } } }, { $lookup: { from: "groups", localField: "groupname", foreignField: "groupname", as: "mobile_group" } }, {$unwind:"$mobile_group"}, { $project : { groupname:"$mobile_group.groupname", "messages" : "$mobile_group.message" } } ]) 

您可以简单地从用户组中获取组名,使用str.split(',') splitsplit为两个组名,然后查询两个组名,如下所示:

  Usergroup.findOne({ mobilenumber: 0509867865 }, function(err, usergroup) { if (err) { return handleError(res, err); } if (!usergroup) { return res.status(404).send('Not Found'); } console.log(usergroup.groupname); var groupname = usergroup.groupname; var groups = groupname.split(','); var messages = {}; for (var i = groups.length - 1; i >= 0; i--) { Group.find({ groupname: groups[i] }, function(err, group) { if (err) { return handleError(res, err); } messages[group.groupname] = group.message; }); if (i == 0) { return res.status(200).json(messages); } } });