mongodb express.js найти объект в массиве - PullRequest
0 голосов
/ 04 мая 2018

У меня есть эта база данных "equipos", которая выглядит так:

    [   
    "_id" : ObjectId("5ae4ea9f434d9b51dad68813"),
    "team_name" : "Alavés",
    "nombre_equipo_movil" : "ALA",
    "cantidad_integrantes" : 20,
    "partidos_jugados" : 29,
    "partidos_ganados" : 10,
    "partidos_empatados" : 1,
    "partidos_perdidos" : 18,
    "goles_a_favor" : 26,
    "goles_en_contra" : 45,
    "players" : [
            {
                    "dorsal" : 1,
                    "nombre_jugador" : "Fernando Pacheco",
                    "edad" : 25,
                    "nacionalidad" : "España",
                    "posicion" : "Portero",
                    "goles" : 0,
                    "asistencias" : 0,
                    "amarillas" : 4,
                    "rojas" : 1
            }
            ...
            ]
    ... 
    ]

Итак, я хочу проверить, есть ли в команде Alavés игрок с «дорсальной» 1, и я делаю это

db.equipos.findOne({"team_name": "Alavés" }, {"players": {$elemMatch: {"dorsal": 1l}}})

проблема в том, что ответ на этот запрос, когда нет игрока с спинной 1:

{ "_id" : ObjectId("5ae4ea9f434d9b51dad68813") }

это идентификатор команды Проблема в том, что когда я отправляю этот запрос с выражением вроде:

    dbo.collection("equipos").findOne(
        {"team_name": sReq.body.nombre_equipo }, {"players": {$elemMatch: {"dorsal": sReq.body.dorsal}}},
        function(err, res){

Я не могу сравнить res с нулем, чтобы увидеть, не может ли он найти игрока с этим спинным, потому что я всегда получаю ID команды ...

Так, как я могу проверить, что этот игрок не существует, используя этот ответ?

Ответы [ 3 ]

0 голосов
/ 04 мая 2018

Mongoose findOne метод получает необязательный второй аргумент с полями, которые вы хотите выбрать.

Вы должны сделать запрос следующим образом:

dbo.collection("equipos").findOne(
        {"team_name": sReq.body.nombre_equipo,
         "players": {$elemMatch: {"dorsal": sReq.body.dorsal}}
        }, function(err, res){

Обратите внимание, что оба поля, которые вы хотите запросить, передаются в качестве первого аргумента, а вторым аргументом будет обратный вызов, потому что вы не указываете mongoose, какие поля выбрать в этом случае.

0 голосов
/ 04 мая 2018

Попробуйте с ..... dorsal: parseInt (sReq.body.dorsal) .... - Потому что typeof req.body.xxx === "строка", но спинной тип: Number.So вы должны изменить строку на число с помощью метода parseInt

0 голосов
/ 04 мая 2018

Не сравнивайте res с null, вы можете сравнить Object.keys(res).length == 1 для этой ситуации. Я действительно не знаю, почему ваш запрос дает такой результат. Но я думаю, что это поможет вам.

if(Object.keys(res).length == 1) {
    console.log("No player found!");
} else {
    console.log("Hey there!");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...