2017-08-25 59 views
0

我有兩個集合:'預訂'和'用戶'。我想加入數據從bookinguserusrLastname排序爲升序。

下面是示例數據。

booking:- {"_id": ObjectId("59a00979bb4d731037000029"), 
    "cabinname": "xxxx", 
    "user": ObjectId("57877d23049ac1b819000029"), 
} 

user:- { "_id": ObjectId("578610de049ac1741d000029"), 
    "usrName": "xxxxx", 
    "usrFirstname": "xx", 
    "usrLastname": "xxxx", 
} 

但排序不工作 - 它不排序asc或desc。

這裏是我的代碼

$results = $collection->aggregate(array(
     array('$match' => array('status'=>array('$in' => array('1', '4')),'is_delete' => 0,'cabinname'=>$eachcabin['name'],'checkin_from'=> array('$lte' => new MongoDate()),'reserve_to'=>array('$gt' => new MongoDate()))), 
     array('$lookup' => array(
     'from' => 'user', 
     'localField' => 'user', 
     'foreignField' => '_id', 
     'as' => 'u' 
     )), 
     array('$unwind' => '$u'), 
     array('$sort' => array(
     'u.usrLastname' => -1, 
     )), 
    ));' 
+3

你需要比「不工作」更具體。顯示一些示例文檔以及預期結果應該來自哪些。確保你實際上指向了正確的字段名稱。這很容易檢查。請參閱[如何創建最小,完整和可驗證的示例](https://stackoverflow.com/help/mcve),瞭解需要添加到問題中的內容以及原因。 –

+2

讓我重申「完整和可驗證」。您告訴我們「它沒有正確排序」。您只顯示每個文件中的一個。 「至少」你需要向我們展示帶有「可驗證」結果的「兩個文件」,該結果顯示該訂單實際上並未按照要求進行排序。否則,你只是在旋轉一個故事,並且可能在你的問題中沒有列出其他問題代碼,這些問題正在導致你的真正問題。這就是爲什麼我們希望你製作一個MCVE,告訴我們該告訴你什麼來糾正,或者讓你意識到自己的錯誤。 –

+0

您應該逐步驗證您的管道。首先檢查你的比賽狀況是否正常。然後檢查查找而不放鬆,然後進行其他步驟。 – Sachin

回答

-1

此代碼的工作對我來說:

$mongo = new \MongoClient(); 
$db = MASTER_DB_NAME; 
$table = $this->__table; 
$c = $mongo->$db->selectCollection($table); 
$search_array['deletedAt'] = ""; 
$pipeline = array(
    array(
     '$match' => $search_array 
    ), 
    array(
     '$lookup' => array('from' => "stm_userDetails", 
      'localField' => "fkUserId", 
      'foreignField' => "_id", 
      'as' => "userArray", 
     ), 
    ), 
    array(
     '$addFields' => array('userArray' => 
      array('$arrayElemAt' => array(array('$filter' => array('input' => '$userArray', 'as' => 'comp', 'cond' => array('$eq' => array('$$comp.fkUserId', $UserId)))),0))), 
    ), 
    array(
     '$unwind' => '$userArray', 
    ), 
    array(
     '$sort' => array('addedAt' => -1), 
    ), 
); 
$cursor = $c->aggregate($pipeline); 
return $cursor; 

希望這可以幫助你。 :)