Php mongodb收集来自不同集合的所有记录
我正在尝试使用php从mongodb获取所有记录。 我有两个收藏。问题是,在实践中,我能为数据库中的每条记录写一句简单的句子吗 约翰[名字收藏]住在城市[城市收藏]谁 开车[从汽车收集处] 这是上面的正确编码吗?我仍然是一个新手,试图一步一步地学习Php mongodb收集来自不同集合的所有记录,php,mongodb,collections,Php,Mongodb,Collections,我正在尝试使用php从mongodb获取所有记录。 我有两个收藏。问题是,在实践中,我能为数据库中的每条记录写一句简单的句子吗 约翰[名字收藏]住在城市[城市收藏]谁 开车[从汽车收集处] 这是上面的正确编码吗?我仍然是一个新手,试图一步一步地学习 <?php foreach ($details as $doc) { echo $doc['name'] . ' lives in'; } foreach ($place as $city) { echo $city['name'] . '
<?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>'} ?>
欢迎您的想法将for循环嵌套在彼此之间
<?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/>';
}
}
}
?>
当我试图访问多个集合中的数据以形成输出时,我就是这样做的。我希望这可以与某种类型的用户id一起使用。对这个做一个完整的表格扫描将是一个非常糟糕的主意 以下是您可以在拥有用户id的情况下执行的操作: 像那样的事情就行了
这里我假设您的用户模式中分别有一个city和ride ID,并且这两个ID字段存储一个city和ride行的ObjectId\u ID;这似乎是最符合逻辑的模式。我认为更好的方法是使用一个集合(比如users)并为每个用户指定名称、城市和汽车。{name:'john',city:'Paris',car:'BMW'}……但与上述示例相比,它的性能如何。如果我使用了不同的集合,那么编码是否正确?如果正确填充了$details、$place、$car字段,那么PHP代码应该执行。然而,我认为这些应该放在一个集合中。如果您可以提供3个集合的样本,那么就更容易理解了。这将导致n^3次结果,这是非常糟糕的。上面的代码在某种程度上可以工作,但是正如sammaye所提到的,它检索所有x3。如何简单地提取一次结果。@user3108623 iterator_to_数组每个查询然后使用php数组进行匹配,然后再执行iterator to数组,但没有多大成功?你能告诉我你会把迭代等的代码放在哪里吗?非常感谢你以我能理解的方式编写代码。特别感谢您对代码的评论。Kind Regards其他集合上特定用户的objectid是否应相同,然后设置一次id就足够了?@user3108623如果这是关系工作的方式,那么yes还有一个问题:如果要搜索整个集合中的用户,是否可以找到足够的id?@user3108623应该可以
$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'];
}