0

codeigniter と mongodb を使用してプロジェクトに取り組んでいます。_id に基づいて mongodb からデータをフェッチするにはどうすればよいですか。つまり、'$query=$this->mongo_db->get_where('photos', $where )'.'id' に基づいて photos_path を取得する必要があります。助けてください

これが私のmongodbコレクションの配列形式です:-

    Array
(
    [0] => Array
    (
        [_id] => MongoId Object
            (
                [$id] => 510f7e0d2217f4fc03000000
            )

        [key] => organization_img
        [photos_path] => uploads/img_51359969805.gif
    )

[1] => Array
    (
        [_id] => MongoId Object
            (
                [$id] => 5111ef2f2217f4280a000000
            )

        [key] => organization_img
        [photos_path] => uploads/image.png
    )

)

ありがとう

4

3 に答える 3

2

このクエリは、条件を使用して codeigniter を使用してコレクションから単一のレコードを取得するのに最適です

$this->mongo_db->where('_id', $mongoid)->find_one('attributes')
于 2016-11-09T07:44:01.013 に答える
1

CodeIgniter の MongoDB API がドライバーのものとどう違うのかはわかりませんが、次のように新しいインスタンスをインスタンス化MongoIdしてクエリに渡す必要があります。

$m = new MongoClient(...);
$col = $m->selectCollection(...);

$cursor = $col->findOne(array('_id' => new \MongoId($id)));

これは、MongoDB が _id 列を保存する方法によるものです。http://docs.mongodb.org/manual/core/object-id/

新しいドキュメントを作成するときに _id 列として単純な文字列を指定すると、MongoIdクエリを実行するたびに新しいオブジェクトをインスタンス化する必要がなくなります。AUTO_INCREMENTその場合、MongoDB はリレーショナル テーブル (MySql、PgSql など) のような特定の列のオプションを提供しないため、一意の ID とカーディナリティを自分で気にする必要があることに注意してください。代わりに、主キーとして機能する一意に生成された id オブジェクトを各ドキュメントに与えます。

列がコレクション自体に関連しない生成されたオブジェクトをデフォルトとして使用する理由_idは、ええと、内部的にはステッチされたバイトの束であり、たとえば並べ替えのために生のバイトを比較することは、比較中に文字列文字として解釈するよりもはるかに高速であるためです。 、アルファベット順などをいじる必要がありますが、生のバイトは論理的に比較できるため、はるかに高速です。そして、私を信じてください.100,000,000以上のドキュメントをクエリするときは、より速くしたいと思うでしょう.これは、適切なサイズのMongoDBインスタンスでは通常です. みたいなテクニックを使ってAUTO_INCREMENT新しいドキュメントを挿入するときに各インデックスが互いに続くことを確認したいので、同じコレクション内の他の挿入を確実にブロックします。AUTO_INCREMENTこれが、キーの代わりに生成されたオブジェクトが使用される理由です。

于 2013-02-06T08:11:24.987 に答える
0

以下を簡単に使用できます。

$query=$this->mongo_db->get_where('photos', 
    array('_id' => new \MongoId($_id_of_another_row))
)

$_id_of_another_rowがすでに MongoId ( ) である場合は、if($_id_of_another_row instanceof \MongoId)再度ラップする必要はなく、すぐに使用できます。

これを でラップすると、MongoIdMongoDB 自体にクエリ ドキュメント用の次の代表的な構造が作成されます (基本的には上記のコード)。

[_id] => MongoId Object(
    [$id] => 5111ef2f2217f4280a000000
)

CI を使用したことがないことを認めなければなりませんが、CI の API は MongoDB 独自の PHP ドライバーを拡張しているだけのようです。

ここでの参照として、サンプルコードスニペットとチュートリアルリンクを詳しく説明した良い質問があります: MongoDB と CodeIgniter

于 2013-02-06T09:26:47.393 に答える