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);
});
});