如何在node和mongodb中查找?

时间:2017-04-19 16:15:34

标签: node.js mongodb express

这是我的'用户组'数据

{
    "_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 northgroup 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);
                });
        });

3 个答案:

答案 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)

您只需使用groupnameUsergroup 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