2012-08-05 76 views
0

我有一個函數在數據庫中創建帖子。帖子獲得自己獨特的_id,但創建後,還會獲得「owner_id」,這是寫帖子的用戶的ID。問題使用find()

我有這顯示所有公開信息完全正常的功能,它看起來像這樣:

public function getPublicPosts() 
{ 
    try 
    { 
     return $this->getCollection("posts")->find(array("privacy"=>0)); 
    } 
    catch(MongoCursorException $e) 
    { 
     echo "Posts retrieval failed: ".print_r($e); 
    } 
} 

所以,同樣我寫我的函數來獲取用戶的帖子是這樣的:

public function getUserPosts($user_id) 
{ 
    try 
    { 
     return $this->getCollection("posts")->find(array("owner_id"=>$user_id)); 
    } 
    catch(MongoCursorException $e) 
    { 
     echo "Posts retrieval failed: ".print_r($e); 
    } 
} 

getPublicPosts完全正常。但是,即使用戶的_id和帖子的owner_id字段完全匹配,getUserPosts也會返回一個空的Mongo遊標對象。在其中顯示的帖子頁面,我已經做了下面幾點是肯定的:

<?php 
    foreach($public_posts as $post): 
?> 
<?php echo $post['owner_id']; ?><br/> 
<?php echo $_SESSION['user_id']; ?> 

這給出了2個職位如下結果:

4ffa66f7e3ed570f62000000 4ffa66f7e3ed570f62000000

所以我真的不確定這裏發生了什麼。我注意到,在數據庫中,當我插入用戶的ID,它的字段值出來作爲

owner_id {「$ OID」:「4ffa66f7e3ed570f62000000」}

也許這是問題嗎?在顯示公開信息時,我訪問$ posts ['owner_id']似乎不是問題。我不知道爲什麼會發生這種情況,因爲我沒有將owner_id設置爲數組,只有一個值(用戶自己的唯一_id)

任何幫助將不勝感激!

+0

我得到的感覺是隱私是一個int值由@Sammaye規定使用其_id來查詢該文檔的數據庫的正確方式(工作用> =方程就完美了),你的ownerid被當成一個字符串來處理。 但是,這只是在黑暗中拍攝(也想知道) – Najzero 2012-08-05 09:21:32

+2

在那裏的正確軌道上的排序!基本上問題是,當將用戶的_id插入到文檔中時,我需要將其鍵入爲字符串,因爲我猜從數據庫中檢索到的mongo _id是對象。所以當再次插入一個時,它會插入{「$ oid」:「your id」}而不是「你的id」。 – 2012-08-05 10:32:23

+0

它在PHP – Sammaye 2012-08-05 13:16:35

回答

0

使用PHP是使用下面的方法如上

$db->users->find(array('_id' => new MongoId($user_id)))