我有这个数据库“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 ......
那么如何使用该响应检查该播放器是否不存在?
答案 0 :(得分:0)
不要将res
与null
进行比较,您可以针对此情况比较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方法将字符串更改为数字。