2012-08-05 3 views
0

데이터베이스에 게시물을 만드는 기능이 있습니다. 게시물은 고유 한 _id를 가지지 만 작성시 게시물을 작성한 사용자의 ID 인 "owner_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는 정상적으로 작동합니다. 그러나 getUserPosts는 사용자의 _id 및 게시물의 owner_id 필드가 정확히 일치하는 경우에도 빈 Mongo 커서 객체를 반환합니다. 게시물을 표시하는 페이지에서 내가 확인하려면 다음을 수행했습니다

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

그리고 이것은이 게시물에 대한 다음과 같은 결과 제공 : 그래서

4ffa66f7e3ed570f62000000 4ffa66f7e3ed570f62000000

을 나는 여기서 무슨 일이 일어나고 있는지 정말로 확신하지 못한다. 나는 사용자의 ID를 삽입하고 때 데이터베이스에, 그것은

OWNER_ID

로 필드 값에서 오는 것으로 나타났습니다 { "$의 OID": "4ffa66f7e3ed570f62000000"} 아마도이

문제는 무엇입니까? 공개 게시물을 표시 할 때 $ posts [ 'owner_id']에 액세스 할 때 문제가되지 않는 것 같습니다. owner_id를 배열로 설정하지 않고 하나의 값 (사용자 고유의 _id)을 설정하지 않으므로 왜 이런 일이 발생하는지 알 수 없습니다.

도움이 될만한 정보가 있습니까?

+0

위 @Sammaye에 의해 명시된 바와 같이 다음과 같은 방법을 사용하는 PHP는 사용하여 _id를 사용하여 문서에 대한 데이터베이스를 조회하는 올바른 방법 (작업 > = 방정식으로 완벽하게) 그리고 ownerid는 문자열로 처리됩니다. 하지만 그것은 어둠 속에서의 단지 발사입니다. (궁금 할지라도) – Najzero

+2

오른쪽 트랙에 가보세요! 기본적으로 문제는 사용자의 _id를 문서에 삽입 할 때 DB에서 검색 한 mongo _id가 객체라고 추측하므로 문자열로 입력해야했습니다. 그래서 다시 삽입 할 때 "id"가 아닌 { "$ oid": "your id"}를 삽입합니다. –

+0

PHP는 – Sammaye

답변

0

I 개인 정보 보호가 int 값이 있다는 느낌을 얻을

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