2014-06-13 66 views
0

我想抓取所有使用php的mongodb記錄。 我有兩個集合。問題是,在實踐中,我能夠爲數據庫上的每條記錄製作一個簡單的句子嗎? :mongodb收集來自不同收藏的所有記錄

ie:約翰[從名字集合]住在市[集市] 駕駛[從汽車集合]。

這是上述的正確編碼嗎?我仍在努力一步一步學習新手

<?php foreach ($details as $doc) { 
echo $doc['name'] . ' lives in'; } 
foreach ($place as $city) { 
echo $city['name'] . ' who drives a '; } 
foreach ($car as $ride) { 
echo $ride['name']; 
echo '<br>'} ?> 

你的想法是對對方的內部循環歡迎

+0

我認爲更好的方法是讓單個集合說出用戶,併爲每個用戶填充名稱,城市和汽車。 {名稱:'約翰',城市:'巴黎',汽車:'寶馬'} .... –

+0

但與上面的例子相比它的表現如何。編碼是否正確,我是否使用不同的集合? – user3108623

+0

如果你有字段$ details,$ place,$ car正確填充,PHP代碼應該執行。不過,我相信這些應該集中在一個集合中。如果你可以提供3個集合的樣本,那麼它會更容易理解。 –

回答

0

我希望這有,比如說使用,各種各樣的user_id。對此進行全表掃描將是一個非常糟糕的主意。

這裏是你可以做什麼,提供你有user_id

$users = $mongo->users->find(['_id' => ['$in' => [1,2,3,4,5,6,7,8,9]]]); 

// Set some variables which will help us perform the detail queries 
$cityIds = []; 
$rideIds = []; 
$userResults = []; 
$cityResults = []; 
$rideResults = []; 

// Iterate through our users. 
foreach($users as $_id => $user){ 

    // We store the MongoId for use in queries 
    $cityIds[] = $user['city_id']; 
    $rideIds[] = $user['ride_id']; 

    // We then store the user result itself so we don't 
    // Do this query multiple times. 
    $userResults[$_id] = $user; 
} 

// Now, let's get our first details. 
$cityResults = iterator_to_array(
    $mongo->cities->find(['_id' => ['$in' => $cityIds]]) 
); 

// And our ride details 
$rideResults = iterator_to_array(
    $mongo->rides->find(['_id' => ['$in' => $rideIds]]) 
); 

// Now let's loop and echo 
foreach($userResults as $k => $user){ 
    echo $user['name'] . 
     ' lives in ' . 
     $cityResults[$user['city_id']]['name'] . 
     ' who drives a ' . 
     $rideResults[$user['ride_id']]['name']; 
} 

類似的東西會做的伎倆。

在這裏,我假設你的用戶架構分別中有一個cityride ID和這兩個ID字段存儲的ObjectId_id)一個cityride行;這似乎是最合乎邏輯的模式。

+0

非常感謝你以這樣的方式編碼,我可以理解。特別感謝關於代碼的評論。 親切的問候 – user3108623

+0

如果一個特定用戶的目標在其他集合上是相同的,那麼設置一次id就足夠了嗎? – user3108623

+0

@ user3108623如果這是你的關係的工作方式,那麼是的 – Sammaye

0

巢。

<?php 

foreach ($details as $doc) { 
foreach ($place as $city) { 
    foreach ($car as $ride) { 
    echo $doc['name'] . ' lives in '.$city['name'].' who drives a '.$ride['name'].'<br/>'; 
} 
} 
    } 
?> 

那我怎麼做時,我嘗試訪問多個集合數據來形成輸出

+1

這將拉出結果n^3次,這是...可怕的 – Sammaye

+0

然而它的工作 – annoymous

+0

上面的代碼工作在一定程度上,但作爲sammaye提到,它檢索所有x3。一個人如何簡單地拉動結果一次。 – user3108623