{ "_id": 1, "title": { header1:{ "name":"A" , age:10, "active":true}, header2:{ "name":"B" , age:15, "active":false}, header3:{ "name":"C" , age:20, "active":true}, header4:{ "name":"D" , age:30, "active":true}, header5:{ "name":"E" , age:35, "active":false}, header6:{ "name":"F" , age:40, "active":true}, header7:{ "name":"G" , age:45, "active":false}, } }¿Cómo puedo mostrar solo aquellos encabezados cuyo valor activo es falso?
$project
1.1 Convierta el par clave-valor en una matriz a través $objectToArray para el campo de headers . 1.2 $filter con $$this.v.active que es false .
$project
2.1 Convierta headers en pares clave-valor a través $arrayToObject y asígnelos al campo de title .
db.collection.aggregate([ { $project: { _id: 1, headers: { $filter: { "input": { $objectToArray: "$title" }, "cond": { "$eq": [ "$$this.v.active", false ] } } } } }, { $project: { _id: 1, title: { "$arrayToObject": "$headers" } } } ])