这是我的'用户组'数据
{
"_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"
}
]
}
在用户组中,我尝试根据groupname
获取mobilenumber
,我有两个小组:group north
和group south
。获取组名后,我需要获取消息。我怎么写这个来找到这个条件。我的目标是向用户发送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);
});
});
答案 0 :(得分:1)
您可以使用$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);
});
});
答案 1 :(得分:1)
您可以将以下聚合用于3.4
版本。
查询$match
集合中的usergroups
个文档将mobilenumber
后跟$split
来分割groupnames
和$lookup
{ {1}}的{{1}}集合中的{1}}。最后一步是将每个groupname
的{{1}} groups
数组messages
$unwind
mobile_group
添加到$project
。
messages
答案 2 :(得分:0)
您只需使用groupname
将Usergroup
split
str.split(',')
转换为使用Group
的两个组名的数组,然后查询groupname
两个 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);
}
}
});
如下:
selector