使用find()时出现问题


Issue using find()

我有一个在数据库中创建帖子的函数。帖子会获得自己的唯一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运行完全正常。然而,getUserPosts返回一个空的Mongo Cursor对象,即使用户的_id和post的owner_id字段完全匹配。在显示帖子的页面上,我已经做了以下事情来确定:

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

这给出了以下2个帖子的结果:

4平方英尺66平方英尺7平方英尺57平方英尺620000004fa66f7e3ed570f62000000

所以我真的不确定这里发生了什么。我注意到,在数据库中,当我插入用户的id时,它在字段值中显示为

owner_id{"$oid":"4ffa66f7e3ed570f62000000"}

也许这就是问题所在?当我在显示公共帖子时访问$posts['owner_id']时,这似乎不是问题。我不知道为什么会发生这种情况,因为我根本没有将owner_id设置为数组,只是一个值(用户自己的唯一_id)

如有任何帮助,我们将不胜感激!

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

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