2014-07-11 61 views
0

嗨我有一個兩個集合我所關注的所有人之一,另一個他們已經發布在Twitter和Facebook等社交網站上。PHP ObjectId組的ID數

以下集合具有其中每個狀態具有字owner每個用戶的進料收集的_id的子陣列,並且具有的ObjectId主人,其是相同的以下項這裏是一個例子

'_id' => new MongoId("REMOVED"), 
    'following' => 
    array (
    '0' => 'ObjectId("53bf464ee7fda8780c8b4568")', 
    '1' => 'ObjectId("53b00ab5e7fda8304b8b4567")', 
), 
    'owner' => new MongoId("53b9ea3ae7fda8863c8b4123"), 

,並在飼料中,你會看到下面

array (
    '_id' => new MongoId("REMOVED"), 
    'owner' => new MongoId("53bf464ee7fda8780c8b4568"), 
    'status' => ' love this video - Pedigree Shelter dogs http://youtube.com/watch?v=5v5Ui8HUuN8', 
    'timestamp' => new MongoDate(1405044327, 565000), 
) 

我有問題following.0狀態,而我可以遍歷一個接一個我不能出於某種原因做了一個$或搜索我不是 我非常理解在運行查詢之前如何遍歷以下數組並將其添加到搜索查詢中。

 collection = static::db()->feed; 
     $where=array('$or' => array(array('owner' => new MongoId($following.0))))); 
     $feed = $collection->find($where); 
     return $feed; 

現在我明白了,我會以某種方式有循環的$where=array('$or' => array(array('owner' => new MongoId($following.0)))));但我只是不是100%確定如何做到這一點。

UPDATE 按答案下面我不得不編輯返回數組 - 現在我只有手動這方面的工作,並不能似乎得到的PHP腳本做

回答返回

Array ([owner] => Array ([$in] => Array ([0] => new MongoId("53bf464ee7fda8780c8b4568") [1] => new MongoId("53b00ab5e7fda8304b8b4567")))) 

正確:

Array ("owner" => Array ('$in' => Array ("0" => new MongoId("53bf464ee7fda8780c8b4568"), "1" => new MongoId("53b00ab5e7fda8304b8b4567")))) 

我不知道如何才能使這個工作。 當前的PHP

$collection = static::db()->following; 
     $following = $collection->findOne(array ('owner' => new MongoId($_SESSION['user_information'][0]['_id']))); 
     $follow = $following['following']; 

     $collection = static::db()->feed; 
     $where=array("owner" => array('$in' =>$follow)); 
     print_r($where); 
     $feed = $collection->find($where); 
     print_r($feed); 
     return $feed; 

我有固定的一個小問題收集及現在返回數組顯示

Array ([owner] => Array ([$in] => Array ([0] => MongoId Object ([$id] => 53bf464ee7fda8780c8b4568) [1] => MongoId Object ([$id] => 53b00ab5e7fda8304b8b4567)))) 

但我仍然無法得到它的返回料這樣一個

array (
    '_id' => new MongoId("53bf4667e7fda8700e8b4567"), 
    'owner' => new MongoId("53bf464ee7fda8780c8b4568"), 
    'status' => ' love this video - Pedigree Shelter dogs http://youtube.com/watch?v=5v5Ui8HUuN8', 
    'timestamp' => new MongoDate(1405044327, 565000), 
) 

當我使用以下內容時問題得到修復

var_dump(iterator_to_array($feed)); 

回答

0

在這裏,我假定這只是在顯示事物的方式和你的下面的數組是一個實際的陣列,而不是一個哈希/映射,它一般是這樣的JSON表示創建一個PHPism:

{ 
    "following": [ 
     ObjectId("53bf464ee7fda8780c8b4568"), 
     ObjectId("53b00ab5e7fda8304b8b4567"), 
    ], 
    "owner": ObjectId("53b9ea3ae7fda8863c8b4123"), 
} 

在這種情況下,「following」已經是一個實際的數組,如果您只想爲您所關注的人提供所有「feed」項目,那麼您只需將其傳遞給$in運算符以進行查詢選擇:

$where = array("owner" => array('$in' => $following)); 
$feed = $collection->find($where); 
return $feed; 

返回的cu rsor將只包含來自其他收集項目的「所有者」出現在「後續」數組中的結果。


關注此代碼:

$list = array(new MongoId(), new MongoId, new MongoId()); 
$doc = array("owner" => array('$in' => $list)); 


echo json_encode($doc, JSON_PRETTY_PRINT); 

儘管如此如何通過這種方法相當於JSON是序列化的JSON:

{ 
    "owner": { 
     "$in": [ 
      ObjectId("53bf8157c8b5e635068b4567"), 
      ObjectId("53bf8157c8b5e635068b4568"), 
      ObjectId("53bf8157c8b5e635068b4569") 
     ] 
    } 
} 

這是BSON將如何進行序列化和是正確的查詢。

+0

小問題似乎ObjectId不正確,它應該是MongoId – RussellHarrower

+0

@RussellHarrower JSON語法,因爲它出現在shell中。我明確地說過。我試圖區分數據結構的PHP可視化和世界其他地區如何看待它們。而且問題是,「這實際上是一個**真正的**陣列嗎?」或者是我們其他人稱之爲「散列」或「地圖」或「字典」或其他什麼? –

+0

這裏是我與上述的問題 - 它返回Array([owner] => Array([$ in] => Array([0] => new MongoId(「53bf464ee7fda8780c8b4568」)[1] => new MongoId(「53b00ab5e7fda8304b8b4567」))))但是當它試圖運行它作爲$ where查詢它不起作用 - 它需要是「所有者」不是[所有者]以及其他關鍵部分 - 任何建議 – RussellHarrower