, 종류의 user_id
를 형성하기 위해 여러 컬렉션의 데이터에 액세스하려고 할 때 내가 그것을 어떻게
<?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/>';
}
}
}
?>
이잖아. 이것에 대한 전체 테이블 스캔을하는 것은 정말 나쁜 생각입니다. 그런
$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'];
}
뭔가 트릭을 할 것 : 여기
당신이 user_id
이 당신이 제공 할 수있는 것입니다. 여기
나는 당신의 사용자 스키마는 각각 그 안에 city
및 ride
ID를 가지고 있다고 가정하고, 두 개의 ID 필드를 저장한다는 ObjectId
(_id
)는 city
및 ride
행의; 이것은 가장 논리적 인 스키마 인 것 같습니다.
나는 더 나은 접근 방법은 사용자에게 말하기를하는 단일 컬렉션을 가지며 이름이 들어있는 모든 사용자에 대해 도시, 자동차가 있다고 생각합니다. {이름 : '존', 도시 : '파리', 자동차 : 'BMW'} .... –
하지만 위의 예와 비교하면 어떻게 작동할까요? 그래도 코딩은 정확하지만 다른 컬렉션을 사용 했나요? – user3108623
$ details, $ place, $ car 필드를 올바르게 채우면 PHP 코드가 실행됩니다. 그러나, 나는 이것들이 하나의 컬렉션에 있어야한다고 생각합니다. 3 가지 컬렉션의 샘플을 제공 할 수 있다면 이해하기 쉽습니다. –