Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

240
Visualizações
How to do find in node and mongodb?

This is my 'usergroups' data

{
    "_id": {
        "$oid": "58f7537ec422895572e988a1"
    },
    "name": "aaa",
    "groupname": "group north,group south",
    "mobilenumber": "0509867865",
    "userid": "6035555c16"

}

here my 'groups' collection data's

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

    ]
}

In Usergroup I am trying to get the groupname based on mobilenumber and I have two groups: group north and group south. After getting groupname I need to fetch the message. How can I write this to find the condition for this. My goal is to send group north, group south message to the user.

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);
                });
        });
about 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

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);
                });
        });
about 4 years ago · Santiago Trujillo Relatório

0

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" } }
])
about 4 years ago · Santiago Trujillo Relatório

0

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

    });
about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda