簡體   English   中英

mongodb收集來自不同集合的所有記錄

[英]mongodb gathering all records from different collections

我試圖使用php從mongodb獲取所有記錄。 我有兩個收藏。 問題是,在實踐中,我能否為數據庫中的每個記錄寫一個簡單的句子?

即:約翰[來自名字收集]居住在城市[來自城市收集],誰開車[來自汽車收集]。

這是上述正確的編碼嗎? 我還是新手,想一步一步學習

 <?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/>'; 
}
 }
  }
?> 

那就是我試圖訪問多個集合中的數據以形成輸出時的處理方法

我希望這可以與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字段存儲cityride行的ObjectId_id ); 這似乎是最合乎邏輯的模式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM