Я работаю над проектом, в котором пытаюсь вернуть документ, но исключаю некоторые дочерние поля в зависимости от статуса. Например, если статус отключен, я не хочу, чтобы этот ребенок вернулся. Но все остальные записи возвращаются, если они не содержат отключенных.
Запрос включает _id
документа, который я хочу найти и вернуть, без «отключенных» дочерних записей.
Как выбрать документ с помощью _id
, затем исключить записи из дочернего массива на основе значения.
Спасибо
Мой документ выглядит следующим образом:
{
"_id" : ObjectId("5e7bb266071f9601b6ad8f4e"),
"name" : "Test Document",
"postcode" : "90210",
"colors" : [
{
"_id" : ObjectId("5e7d276a05674f0cf49bdcec"),
"color" : "blue",
"status": "active"
},
{
"_id" : ObjectId("5e7d276a05674f0cf49bdceg"),
"color" : "red",
"status": "active"
},
{
"_id" : ObjectId("5e7d276a05674f0cf49bdceh"),
"color" : "green",
"status" : "disabled"
}
]
}
Как мне вернуть:
{
"_id" : ObjectId("5e7bb266071f9601b6ad8f4e"),
"name" : "Test Document",
"postcode" : "90210",
"colors" : [
{
"_id" : ObjectId("5e7d276a05674f0cf49bdcec"),
"color" : "blue",
"status": "active"
},
{
"_id" : ObjectId("5e7d276a05674f0cf49bdceg"),
"color" : "red",
"status": "active"
}
]
}
Я пробовал варианты:
findr.aggregate([
{
$match: {
$and: [{
_id: mongodb.ObjectId(_id)
}, {
'color.status': 'active'
}]
}
},
{
$project: {
_id
name: 1,
postcode: 1,
colors: {
$filter: {
input: '$colors',
as: 'color',
cond: {
$eq: ['$$color.status', 'active']
}
}
}
}
}
])