我有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")}
所以我的问题是如何使用金额总和进行排序?
预期的输出细节:
在上面的屏幕截图中,我想对所有列进行排序,并且_id,电子邮件地址,名字,姓氏来自用户集合,并且提交和花费金额来自订单集合。同样,提交和订单收集所花费的金额也是字段总和。那么如何使用所有的列进行排序?
答案 0 :(得分:1)
您可以使用以下汇总
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 }}