This is my \'usergroups\' data
{
\"_id\": {
\"$oid\": \"58f7537ec422895572e988a1\"
},
\"name\": \"aaa\",
\"groupname\": \"group north,gro
You can simply get the groupname from the Usergroup, split it to array of two group name using str.split(',') and then query the Group for two groupname as follow:
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);
}
}
});
You can use the below aggregation for 3.4 version.
The query will $match documents in the usergroups collection with the mobilenumber followed by $split to split the groupnames and $lookup the groupname in the groups collection for messages. Final step is to $unwind the mobile_group array to $project the messages for each groupname.
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" } }
])
You can use the $in operator:
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);
});
});