#mongodb #mongoose #mongodb-query #aggregation-framework
#mongodb #mongoose #mongodb-запрос #агрегация-фреймворк
Вопрос:
Это модель схемы
const tokoSchema = new mongoose.Schema({
name: String
product: [{display: Boolean}]
}
Итак, я хочу фильтровать данные по product.display
. Когда я фильтровал его с помощью toko.find({"product.display": true})
, он показывает только список toko, который имеет product.display: true
, но я хочу, чтобы, если отображение продукта является ложным, оно продолжало показывать _id
и name
toko с пустым массивом продукта []
. Ожидаемый пример запроса
// showing all tokos
[
{
_id: blabla
name: "test",
product: [{_id: blabla, display: true}], // filter display:true
},
{
_id: blabla,
name: "test",
product: [] // no product with display:true
}
]
пример toko.find({"product.display": true})
запроса
// not showing all tokos
[
{
_id: blabla
name: "test",
product: [{_id: blabla, display: true}]
},
]
есть решение для этого? должен ли я использовать aggregate?
Ответ №1:
Для массива вам нужен $filter:
db.toko.aggregate([
{
$addFields: {
product: {
$filter: {
input: "$product",
cond: {
$eq: [ "$$this.display", true ]
}
}
}
}
}
])