mongodb express.js在数组中查找对象

时间:2018-05-04 18:16:59

标签: javascript mongodb express

我有这个数据库“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与null进行比较,看看是否找不到该背景的玩家,因为我总是得到团队的ID ......

那么如何使用该响应检查该播放器是否不存在?

3 个答案:

答案 0 :(得分:0)

不要将resnull进行比较,您可以针对此情况比较Object.keys(res).length == 1。我真的不知道为什么你的查询会产生这个结果。但我认为这会对你有帮助。

if(Object.keys(res).length == 1) {
    console.log("No player found!");
} else {
    console.log("Hey there!");
}

答案 1 :(得分:0)

Mongoose findOne方法接收带有您要选择的字段的可选第二个参数。

您应该像这样查询:

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

请注意,您要查询的两个字段都作为第一个参数传递,第二个参数将是回调,因为在这种情况下您不会告诉mongoose选择哪些字段。

答案 2 :(得分:0)

尝试使用..... dorsal:parseInt(sReq.body.dorsal).... - 因为typeof req.body.xxx ===" string&#34 ;;但是背面类型:Number.So你必须用parseInt方法将字符串更改为数字。