How to do find in node and mongodb?

前端 未结 3 724
无人共我
无人共我 2021-01-22 22:25

This is my \'usergroups\' data

{
    \"_id\": {
        \"$oid\": \"58f7537ec422895572e988a1\"
    },
    \"name\": \"aaa\",
    \"groupname\": \"group north,gro         


        
相关标签:
3条回答
  • 2021-01-22 22:48

    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);
                }
            }
    
        });
    
    0 讨论(0)
  • 2021-01-22 22:56

    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" } }
    ])
    
    0 讨论(0)
  • 2021-01-22 23:09

    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);
                    });
            });
    
    0 讨论(0)
提交回复
热议问题