我需要MongoDb和PHP驅動程序的幫助。Mongo PHP從另一個集合和更新文檔加入數據 - 像SQL JOIN
我有4個類別:
order_aproved:
{ "order_id" : mongoId , "user_id":num , "order_date":mongoDate , "requset" : string }
orders_rejected:
{ "order_id" : mongoId, "user_id" : num , "order_date" : mongoDate , "requset" : string }
用戶:
{ "user_id" : mongoId, "username" : num , "last_order" : mongoDate , "num_orders" : num, "last_order" }
orders_log:
{ "order_id" : mongoId , "order_date" : mongoDate , "status" : boolen , "user_id" : num }
每間覈准/拒絕訂單,我對用戶文檔 更新num_orders
有一個新的/拒絕訂單。所以這個數字總是變化 並在orders_log
上記錄該順序。
我需要獲取批准的所有訂單/用戶[array]
與條件的名單上orders_log
拒絕,並獲得訂單來自這個用戶數num_orders
併爲用戶最後訂購日期由訂單
我做它像這樣的:
$cursor = $orders->find()->sort(array("order_date" => -1))->limit(15);
$array = iterator_to_array($cursor,false);
$users_for_aproved = ["123","124","125"];
$users_for_rejcted = ["112","113","114"];
$js = "function() { if (this.requset) { return this.requset.length > 0 } }";
$query1 = array('$and' => array(
array("user_id" => array('$in'=> $users_for_aproved)),
array('$where' => $js)
));
$query1 = array('$and' => array(
array("user_id" => array('$in'=> $users_for_rejcted)),
array('$where' => $js)
));
$query_or = array('$or' => array($query,$query1);
$cursor = $orders_log->find($query_or)->sort(array("order_date" => -1))->limit(15);
$array = iterator_to_array($cursor,false);
for ( $x=0; $x < count($array) ; $x++) {
$query = array("user_id" => $order["user_id"]);
$cursor = $orders->find($query)->limit(1);
$array = iterator_to_array($cursor,false);
$order_count = $array[0]["num_orders"];
$array[$x]["order_count"] = $order_count;
}
return $array;
它的工作,但它不是非常有效,我需要一種方法來從另一個收集數據和NUM_ORDERS添加到我有沒有找到一個使用doc形成花葯查詢
像SQL JOIN,但在Mongo和PHP驅動程序 謝謝!
可能重複[mongodb連接式查詢,帶有兩個集合和where子句](https://stackoverflow.com/questions/21067464/mongodb-join -like-queries-with-two-collections-and-a-where-clause) – BenRoob
我需要mongo和php,你的回答只是mongo,它不像我的問題,謝謝 – user2843540
我對這個解釋有點失落。 「用戶列表」來自哪裏?這是外部輸入還是意味着要從其中一個集合中檢索?你是否確實意味着需要通過「已批准」和「已拒絕」來完成清單的某種選擇?我們只是基本上向當前用戶添加「已批准」**減去**「已拒絕」 num_orders'?此外,這只是爲稍後的「更新」收集數據,對嗎?半相關的是爲什麼''requset''被檢查爲'> 0'長度?這可以做不同? –