Мне интересно, как я могу достичь определенного результата.
Начало
Я использую https://github.com/jenssegers/laravel-mongodb
Пример кода , приведенный ниже, используется для получения массива документов, который содержит мой конкретный фрагмент в узле вознаграждений. И до этого момента все работает, как задумано.
$array = [
'rewards.slug' => ['$eq' => 'example_slug'],
'expired' => ['$gte' => \Carbon\Carbon::now()->toDateTimeString()]
];
$models = Master::raw(function ($collection) use (&$array) {
return $collection->find(
$array, ["typeMap" => ['root' => 'array', 'document' => 'array']])
->toArray();
});
Мой пример документа
{
"_id": {
"$oid": "5be4464eafad20007245543f"
},
"some_int_value": 100,
"some_string_value": "String",
"rewards": [
{
"slug": "example_slug",
"name": "Example slug",
"quantity": 4,
"estimated": {
"value": 18750
}
},
{
"slug": "example_slug",
"name": "Example slug",
"quantity": 1,
"estimated": {
"value": 100
}
},
{
"slug": "other_example",
"name": "Other slug example",
"quantity": 1,
"estimated": {
"value": 100
}
}
],
"expires": "2018-11-08 20:20:45",
}
Желаемый результат
Я бы хотел реализовать более сложный запрос, который бы выполнял следующие действия.
- Получить документы, которые: псевдо
select all documents that contain reward "slug": "example_slug", sum the quantity of them, return greater than X quantity documents, order by sum quantity desc
- и очень похожий на вышеприведенный
select all documents that contain reward "slug": "example_slug", sum estimated.value, return greater than X estimated.value documents, order by sum of estimated.value desc
Если вам нужно больше объяснений, не стесняйтесь спрашивать, я чувствую, что даже не знаю, с чего начать.
Вся помощь очень ценится