Объедините 2 сбора данных с сортировкой и разбиением на страницы в mongodb и php - PullRequest
0 голосов
/ 27 ноября 2018

У меня 2 коллекции пользователя и заказов.Я хочу собрать основную информацию, такую ​​как имя пользователя, имя из коллекции пользователей и сумму из таблицы заказов.Я могу выбирать данные, получая информацию из коллекции пользователей и просматривая коллекцию заказов.Нумерация страниц также работает, но как реализовать сортировку с этим.Как применить сортировку по сумме суммы из коллекции заказов.Мой код указан ниже

$cursor = $collection->find($where)->sort($order)->skip($page)->limit($perPage);
    foreach ($cursor as $key => $value) {
        $orderCollection = $this->db->selectCollection('orders');
        $userSubmissions =  $orderCollection->aggregate([
                                ['$match' => ['user_id' => $value['_id'], 'txn_type' => 'DR']],    
                                ['$group' => ['_id' => null, 'debit' => ['$sum' => '$amount']]],
                                ['$sort'  => $order]
                            ]);}

Также мои коллекции

Коллекция пользователей

{
"_id" : ObjectId("59f0546ef2a608770e8b4569"),
"firstname" : "test",
"username" : "test@test.com",
"lastname" : "test",
"status" : NumberLong(1),
"admin" : NumberLong(1),
"created_at" : ISODate("2018-04-02T06:46:53.702Z")}

Коллекция заказов

{
"_id" : ObjectId("5aaa49d0f2a60838218b4568"),
"user_id" : ObjectId("59f0546ef2a608770e8b4569"),
"txn_type" : "DR",
"name" : "Test Test",
"amount" : 11.85,
"created" : ISODate("2018-03-15T10:24:16.634Z")}

Таким образом, мой вопрос заключается в том, как отсортировать, используя сумму суммы?

Ожидаемый результат detsils:

enter image description here

На приведенном выше снимке экрана я хочу отсортировать все столбцы, а _id, адрес электронной почты, имя, фамилия взяты из коллекции пользователей, а отправка и потраченная сумма получены из коллекции заказов.Кроме того, как подача, так и сумма, потраченная на сбор заказов, являются суммой полей.Так как сортировать используя все столбцы, которые?

1 Ответ

0 голосов
/ 08 декабря 2018

Вы можете использовать агрегацию ниже

db.users.aggregate([
  { "$match": { "_id": ObjectId("59f0546ef2a608770e8b4569") }},
  { "$lookup": {
    "from": "orders",
    "localField": "_id",
    "foreignField": "user_id",
    "as": "orders"
  }},
  { "$unwind": "$orders" },
  { "$group": {
    "_id": "$orders.user_id",
    "debit": { "$sum": "$orders.amount" },
    "firstname": { "$first": "$firstname" },
    "lastname": { "$first": "$lastname" },
    "email": { "$first": "$username" }
  }}
])

Вы можете использовать $sort с любым из полей в агрегации выше.Просто используйте { $sort: { fieldName: 1 }}

...