Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用find()时出现问题_Php_Mongodb - Fatal编程技术网

Php 使用find()时出现问题

Php 使用find()时出现问题,php,mongodb,Php,Mongodb,我有一个在数据库中创建帖子的函数。帖子有自己独特的_id,但在创建时,也会得到一个“所有者id”,即写帖子的用户的id 我有一个函数可以完美地显示所有公共帖子,它看起来如下: public function getPublicPosts() { try { return $this->getCollection("posts")->find(array("privacy"=>0)); } catch(MongoCursorExce

我有一个在数据库中创建帖子的函数。帖子有自己独特的_id,但在创建时,也会得到一个“所有者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);
    }
}
同样,我编写了检索用户帖子的函数,如下所示:

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和帖子的所有者id字段完全匹配。在显示帖子的页面上,我做了以下操作:

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


这就给出了两个职位的以下结果:

4ffa66f7e3ed570f62000000 4ffa66f7e3ed570f62000000

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

所有者id{“$oid”:“4ffa66f7e3ed570f62000000”}

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


任何帮助都将不胜感激

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

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

我感觉隐私是一个int值(可以很好地处理>=方程),而您的ownerid被当作字符串处理。但这只是一个在黑暗中拍摄(也奇怪)在正确的轨道排序那里!基本上,问题是在将用户的id插入文档时,我需要将其作为字符串键入,因为我猜从db检索到的mongo id是对象。因此,当再次插入一个时,它将插入{“$oid”:“您的id”},而不仅仅是“您的id”。它在PHPto扩展中称为
MongoId()
:例如,通过{code>db->users->find(数组(“'u id'=>new MongoId($user\id))驱动程序将自动将
MongoId
转换为
ObjectId
。是的!我也发现了这一点,非常感谢你的帮助。