使用find()发行问题

时间:2012-08-05 09:10:23

标签: php mongodb

我有一个在数据库中创建帖子的功能。这些帖子获得了自己独特的_id,但在创建时,还会得到一个“owner_id”,这是撰写帖子的用户的ID。

我有一个功能,可以完美地显示所有公开帖子,看起来像这样:

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和post的owner_id字段完全匹配,getUserPosts也会返回一个空的Mongo Cursor对象。在显示帖子的页面上,我已完成以下操作以确保:

<?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)

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

使用PHP使用_id查询数据库的正确方法是使用上面@Sammaye所述的以下方法

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