我希望這有,比如說使用,各種各樣的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'];
}
類似的東西會做的伎倆。
在這裏,我假設你的用戶架構分別中有一個city
和ride
ID和這兩個ID字段存儲的ObjectId
(_id
)一個city
和ride
行;這似乎是最合乎邏輯的模式。
我認爲更好的方法是讓單個集合說出用戶,併爲每個用戶填充名稱,城市和汽車。 {名稱:'約翰',城市:'巴黎',汽車:'寶馬'} .... –
但與上面的例子相比它的表現如何。編碼是否正確,我是否使用不同的集合? – user3108623
如果你有字段$ details,$ place,$ car正確填充,PHP代碼應該執行。不過,我相信這些應該集中在一個集合中。如果你可以提供3個集合的樣本,那麼它會更容易理解。 –