Javascript mongodb express.js在数组中查找对象
我有一个数据库“equipos”,看起来像这样: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
[
"_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