0

データベースに投稿を作成する機能があります。投稿は独自の一意の _id を取得しますが、作成時に、投稿を書いたユーザーの ID である「owner_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 フィールドと投稿の 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) に設定していないため、なぜこれが起こっているのかわかりません。

どんな助けでも大歓迎です!

4

1 に答える 1

0

PHP を使用して _id を使用してドキュメントのデータベースをクエリする正しい方法は、上記の @Sammaye で述べられている次の方法を使用することです。

$db->users->find(array('_id' => new MongoId($user_id)))
于 2012-08-06T07:25:06.860 に答える