Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript mongodb express.js在数组中查找对象_Javascript_Mongodb_Express - Fatal编程技术网

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

Javascript mongodb express.js在数组中查找对象,javascript,mongodb,express,Javascript,Mongodb,Express,我有一个数据库“equipos”,看起来像这样: [ "_id" : ObjectId("5ae4ea9f434d9b51dad68813"), "team_name" : "Alavés", "nombre_equipo_movil" : "ALA", "cantidad_integrantes" : 20, "partidos_jugados" : 29, "partidos_ganados" : 10, "partido

我有一个数据库“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
            }
            ...
            ]
    ... 
    ]
所以我想检查一下,在阿拉维斯队中是否有一名“背”为1的球员,我正在这样做

db.equipos.findOne({"team_name": "Alavés" }, {"players": {$elemMatch: {"dorsal": 1l}}})
问题是,当没有具有1的玩家时,对该查询的响应是:

{ "_id" : ObjectId("5ae4ea9f434d9b51dad68813") }
那是球队的身份证。问题是,当我使用express发送该查询时,例如:

    dbo.collection("equipos").findOne(
        {"team_name": sReq.body.nombre_equipo }, {"players": {$elemMatch: {"dorsal": sReq.body.dorsal}}},
        function(err, res){
我无法将res与null进行比较,以确定它是否无法找到具有该背部的球员,因为我总是获得球队的ID


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

不要将
res
null
进行比较,在这种情况下,您可以比较
Object.keys(res).length==1
。我真的不知道为什么你的查询会得出这样的结果。但我认为这会对你有所帮助

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

Mongoose
findOne
方法接收一个可选的第二个参数,其中包含要选择的字段

您应该这样查询:

    [   
    "_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
            }
            ...
            ]
    ... 
    ]
dbo.collection(“equipos”).findOne(
{“团队名称”:sReq.body.nombre_equipo,
“玩家”:{$elemMatch:{“背侧”:sReq.body.dorsal}
},函数(err,res){

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

尝试使用…..dorsal:parseInt(sReq.body.dorsal)…-
因为typeof req.body.xxx==“string”;但是dorsal type:Number。所以你必须用parseInt方法将string更改为Number。

当有一个玩家有这个dorsal??相同,但有玩家属性:{“\u id”:ObjectId(“5ae4ea9f434d9b51dad68813”),“玩家”:[{“dorsal”:1,“nombre_jugador”:“费尔南多·帕切科”,“edad”:25,“Nationalidad”:“España”,“Possion”:“Portero”,“goles”:0,“asistencias”:0,“amarillas”:4,“rojas”:1}}}}尝试使用….背:parsint(sReq.body.dorsal)…因为typeof req.body.xxx==”字符串“但dorsal type:Number。所以你必须用parseInt方法将字符串更改为Number。就是这样,它现在可以工作了。非常感谢!@ŞükSefHamIt一直在打印“嘿,好了”,我打印了Object.keys(res)。length,当没有玩家使用你说的特定dorsal时,它总是12{code>”{u id:ObjectId(“5ae4ea9f434d9b51dad68813”)”是输出,一个有一个键的对象!检查输出是否有键
“players”
。@IvánYes,这是输出,但从mongo控制台,我打印了res.players,它显示了该团队中的所有玩家为什么不使用
.findOne({“team_name”:sReq.body.nombre_equipo},{“players.dorsal”:sReq.body.dorsal}
?@Iván