2017-08-25 1 views
0

Ich habe zwei Sammlungen: 'Buchung' und 'Benutzer'. Ich möchte Daten von booking und user mit usrLastname als aufsteigend sortiert verbinden.

Hier sind die Beispieldaten.

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

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

Aber Sortierung funktioniert nicht - es sortiert nicht asc oder desc.

Hier ist mein Code

$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

Sie müssen viel spezifischer sein als "nicht funktioniert". Zeigen Sie einige Beispieldokumente an und was das erwartete Ergebnis daraus sein sollte. Stellen Sie sicher, dass Sie tatsächlich auf die richtigen Feldnamen zeigen. Das ist ziemlich einfach zu überprüfen. Unter [Erstellen eines minimalen, vollständigen und überprüfbaren Beispiels] (https://stackoverflow.com/help/mcve) erfahren Sie, was zu Ihrer Frage hinzugefügt werden muss und warum. –

+2

Lassen Sie mich wiederholen "Complete und Verifizierbar". Sie sagen uns, "es sortiert nicht richtig". Sie zeigen nur eines von jedem Dokument an. Am "allerwenigsten" müssen Sie uns "zwei Dokumente" mit einem "Verifizierbar" -Ergebnis zeigen, das zeigt, dass die Bestellung nicht wirklich wie gewünscht sortiert ist. Ansonsten drehst du nur eine Geschichte und hast wahrscheinlich einen anderen Problemcode, der in deiner Frage nicht aufgeführt ist und dein tatsächliches Problem verursacht. Deshalb möchten wir, dass du einen MCVE produzierst, der uns entweder sagt, was er dir zu korrigieren hat oder dir auf andere Weise erlaubt, deinen eigenen Fehler zu erkennen. –

+0

Sie sollten Ihre Pipeline Schritt für Schritt überprüfen. Überprüfen Sie zunächst, ob Ihre Spielkondition gut funktioniert. Dann überprüfen Sie die Suche ohne abzuwickeln und dann für andere Schritte. – Sachin

Antwort

-1

Dieser Code funktioniert für mich:

$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; 

Hope this Sie helfen können. :)

Verwandte Themen