如何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" } ] }
在用户组我试图得到基于mobilenumber
组mobilenumber
,我有两个组: group north
和group 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(',')
split
其split
为两个组名,然后查询两个组名,如下所示:
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); } } });