Можно ли выполнить фасетную агрегацию с PHP-библиотека mongodb?
Как описано в документации Структура агрегации Монгодба, можно использовать суб-конвейеры, используя граненый поиск, например:
db.artwork.aggregate( [
{
$facet: {
"categorizedByTags": [
{ $unwind: "$tags" },
{ $sortByCount: "$tags" }
],
"categorizedByPrice": [
// Filter out documents without a price e.g., _id: 7
{ $match: { price: { $exists: 1 } } },
{
$bucket: {
groupBy: "$price",
boundaries: [ 0, 150, 200, 300, 400 ],
default: "Other",
output: {
"count": { $sum: 1 },
"titles": { $push: "$title" }
}
}
}
],
"categorizedByYears(Auto)": [
{
$bucketAuto: {
groupBy: "$year",
buckets: 4
}
}
]
}
}
])
Тем не менее, похоже, нет способа сделать это в PHP. Я пробовал следующее:
$cursor = $collection->aggregate([
[
'$facet' => [
'categorizedByTags' => [
'$unwind' => '$tags',
'$sort' => '$tags'
]
]
]
]);
Который выбрасывает следующее исключение:
аргументами $ facet должны быть массивы, categoryorByTags — тип объекта
Кажется, что драйвер MongoDB обрабатывает конвейер определенным образом, делая невозможным выполнение фасетных агрегаций.
Есть ли способ сделать эту работу?
Решение благодаря Veeram
$cursor = $collection->aggregate([
[
'$facet' => [
'categorizedByTags' => [
['$unwind' => '$tags'],
['$sort' => '$tags']
]
]
]
]);
Задача ещё не решена.
Других решений пока нет …