Пн goose: Как я могу получить элемент объекта, хранящийся внутри другого основного объекта, по значению поля? - PullRequest
0 голосов
/ 17 января 2020

У меня есть следующая схема teamModelSchema.


var teamMemberModelSchema = new mongoose.Schema({
    "email": {
        "type": String,
        "required": true,
        "min": 5,
        "max": 20
    },
    "name": {
        "type": String,
        "required": true,
        "min": 5,
        "max": 20
    },
    "role": {
        "type": String,
        "required": true,
        "min": 20,
        "max": 50
    },
    "twitter": {
        "type": String,
        "required": true,
        "min": 20,
        "max": 50
    },
    "facebook": {
        "type": String,
        "required": true,
        "min": 20,
        "max": 50
    },
    "linkedin": {
        "type": String,
        "required": true,
        "min": 20,
        "max": 50
    },
});

var teamModelSchema = new mongoose.Schema({
    "title": {
        "type": String,
        "required": true,
        "min": 5,
        "max": 20
    },
    "headline": {
        "type": String,
        "required": true,
        "min": 5,
        "max": 30
    },
    "description": {
        "type": String,
        "required": true,
        "min": 5,
        "max": 80
    },
    "team": [teamMemberModelSchema]
}, { collection: 'team' });

Я хотел бы найти элемент внутри массива "team" (teamMemberModelSchema), который соответствует указанному c адресу электронной почты.

Я могу прочитать его, но не могу найти конкретный элемент c, как только у меня есть адрес электронной почты.

Как я могу это сделать?

Я пытался таким образом, но пустой результат - это то, что я получил.

module.exports.getTeamMember = function (req, res) {
    console.log(req.params.email);
    TeamModel.find({"team": {email:  req.params.email}  }).exec(function(err, team) {
        if (!team) {
            sendJsonResponse(res, 404, {"message": "team member information is not found"});
            return;
        } else if (err) {
            console.log(err);
            sendJsonResponse(res, 404, err);
            return;
        }
        console.log(team);
        sendJsonResponse(res, 200, team);
      });
};

Ответы [ 2 ]

0 голосов
/ 17 января 2020

Есть пара изменений:

module.exports.getTeamMember = function (req, res) {
console.log(req.params.email);
TeamModel.find({ "team.email": 'my@gmail.com' }, { 'team.$': 1, 'title': 1, 'headline': 1, 'description': 1 }).exec(function (err, team) {
        if (err) {
            console.log(err);
            sendJsonResponse(res, 404, err); // Does it do res.send() ?
            return; // no need of returns if you do res.send()
        } else if (!team.length) { 
         /** You need above check as you're doing .find() which returns an array you need check it's length, 
             If nothing found it will return [] - so checking length. If you thing there will only be one or none then use .findOne() then you use ur code */
            sendJsonResponse(res, 404, { "message": "team member information is not found" });
            return;
        }
        console.log(team);
        sendJsonResponse(res, 200, team);
    });
};
0 голосов
/ 17 января 2020

Вы должны быть в состоянии найти запрошенную информацию, используя метод .find ()

Team.find({email: "example@email.com"}, (err, foundMember)=>{
  if(err){
    console.log(err)
  } else {
    res.json(foundMember)
  }
})
и теперь, когда вы нашли члена, вы можете go просмотреть его и найти любую информацию об этом члене команды
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...