我有一个mongodb表,其中包含一个足球锦标赛的装置,所以每个比赛周都是这样的:
"number": 1,
"games" : [
{
"estadio" : "G C",
"arbitro" : "M",
"resultado" : "vs",
"editor" : "Pepe",
"_id" : ObjectId("5af0889e14553f0788bc9db8"),
"equipo_local" : "Las Palmas",
"equipo_visitante" : "Villareal",
"fecha" : "10/05/2018",
"horario" : "16:00",
"hora" : "12:12"
},
{
"estadio" : "Ciudad de Valencia",
"arbitro" : "A Confirmar",
"resultado" : "vs",
"editor" : "No Asignado",
"_id" : ObjectId("5af0889e14553f0788bc9db7"),
"equipo_local" : "Levante",
"equipo_visitante" : "Deportivo",
"fecha" : "28/01/2019",
"horario" : "18:00"
},
..
]
我想找到游戏中的所有物品"游戏"包含"编辑器"的每个比赛周:" pepe",
我尝试过这样的事情
db.fechas.find({"games.editor": "Pepe"})
但这显示了每个游戏"包含"编辑器":" Pepe"的对象的数组,我只想要那个特定的对象,而不是整个数组。
答案 0 :(得分:2)
find
方法检查嵌套数组是否包含符合条件的任何文档并返回整个文档。
您需要聚合框架的$filter运算符来获取数组的子集,请尝试:
db.fechas.aggregate([
{
$addFields: {
games: {
$filter: {
input: "$games",
as: "game",
cond: {
$eq: [ "$$game.editor", "Pepe" ]
}
}
}
}
},
{
$match: {
$expr: {
$gt: [ { $size: "$games" }, 0 ]
}
}
}
])