, $unwind
db.col.aggregate([
{$addFields : {
index : {$indexOfArray : ["$data.identifier", "a"]},
isTrue : {$gte : [{$arrayElemAt : ["$data.value", {$indexOfArray : ["$data.identifier", "a"]}]}, 10]}
}},
{$addFields : {
row : {
identifier : {$arrayElemAt : ["$data.identifier", "$index"]},
value : {$cond : ["$isTrue", {$arrayElemAt : ["$data.value", "$index"]}, null]}
}
}},
{$project : {index :0, isTrue : 0, data : 0}}
]).pretty()
> db.col.aggregate([ {$addFields : { index : {$indexOfArray : ["$data.identifier", "a"]}, isTrue : {$gte : [{$arrayElemAt : ["$data.value", {$indexOfArray : ["$data.identifier", "a"]}]}, 10]} }}, {$addFields : { row : { identifier : {$arrayElemAt : ["$data.identifier", "$index"]}, value : {$cond : ["$isTrue", {$arrayElemAt : ["$data.value", "$index"]}, null]} } }}, {$project : {index :0, isTrue : 0, data : 0}} ]).pretty()
{ "_id" : 1, "row" : { "identifier" : "a", "value" : 10 } }
>
$map
db.col.aggregate([
{$addFields : {
isTrue : {$gte : [{$arrayElemAt : ["$data.value", {$indexOfArray : ["$data.identifier", "a"]}]}, 10]}
}},
{$addFields : {
data :
{$map : {
input : "$data",
as : "d",
in : {
identifier : "$$d.identifier",
value : {$cond : ["$isTrue", "$$d.value", null]}
}
}}
}},
{$project : {_id :0, isTrue : 0}}
]).pretty()
{
"data" : [
{
"identifier" : "a",
"value" : 10
},
{
"identifier" : "b",
"value" : 53
},
{
"identifier" : "c",
"value" : 16
}
]
}