0

MongoDB を使い始めたばかりです。次のようなmongoコマンドを使用して、端末に新しいレコードを挿入できます。

db.test.insert({var: 'data' }) .

そして、次のように php でこれらのレコードを取得できます。

Array
(
    [0] => Array
        (
            [_id] => MongoId Object
                (
                    [$id] => 509d0a4ae6c4d3ca0ba30572
                )

            [deneme] => 1
        )

    [1] => Array
        (
            [_id] => MongoId Object
                (
                    [$id] => 509d09e2a3047c588723f9bf
                )

            [deneme] => 
            [name] => aa
        )

)

しかし、次のようなphpでレコードを挿入することはできません:

$m->insert(array(
'url' => 'http://www.query7.com',
'software' => 'wordpress',
'tutorials' => array('php','javascript','web development'),
));

私はこのエラーを取得します: 致命的なエラー: メッセージ「BSON doc のサイズは 145 バイト、最大値は 0」でキャッチされない例外「MongoException」

さまざまなphpクラスでテストしましたが、常に同じエラーが発生します。「BSON doc のサイズ」とは何ですか?

ありがとう

4

4 に答える 4

1

$m 変数ですべてを使用できるとは思いません。PHPドキュメントが推奨するようなことをしてみてください:

$m = new Mongo(); 
$db = $m->selectDB('test');
$collection = new MongoCollection($db, 'phpmanual');

$collection->insert(array(
    'url' => 'http://www.query7.com',
    'software' => 'wordpress',
    'tutorials' => array('php','javascript','web development'),
));

Mongo に関する PHP ドキュメント

ここにある最新の mongoDB バージョンであることを確認してください。

于 2012-11-09T15:09:29.673 に答える
1

これは通常、次のいずれかから発生します。

  • MongoDB の不適切なダウンロード。この場合、MongoDB サイトから最新バージョンをダウンロードします: http://www.mongodb.org/downloads
  • または、最新の PHP ドライバーとそのような古いバージョンを混在させます。

MongoDB の v1.6 以降、PHP ドライバーに重大な変更がありましたが、それは PHP が MongoDB に接続する方法と、その他のいくつかのことだけに関係していました。古いバージョンの MongoDB にクエリを実行できるかどうかには影響しませんでした。

したがって、これが問題ではない可能性が非常に高いですが、私はそれを除外しません.

いずれにせよ、私は:

  • Ubuntu 7.11 から 12.04 にアップグレードします。
  • 最新の MongoDB にアップグレードする
  • PHPのバージョンもアップグレード

これらすべての悪い組み合わせかもしれません。

于 2012-11-09T15:50:08.313 に答える
0

おそらく問題は古いバージョンのMongoにあります。あなたの答えから判断すると、MongoDb挿入エラー(php)-BSONドキュメントはXバイト、最大は0 、そしてhttps://stackoverflow.com/a/12009052/1090562の答え

新しいmongoのインストール後も問題が解消されない場合は、ここに返信してください

于 2012-11-09T16:27:26.583 に答える
0

私はいくつかの調査を行いましたが、使用しているMongoDBのバージョンでは、関数が呼び出されたmaxBsonObjectSizeときに提供されていないようです(こちらを参照)。db.isMaster()

これは、接続オブジェクトから最大サイズを取得しようとするため、MongoDB データベースへのアクセスに使用している PHP ドライバーと競合している可能性があります (こちらの 604 行を参照)。

if (FAILURE == php_mongo_write_insert(&buf, Z_STRVAL_P(c->ns), a, connection->max_bson_size TSRMLS_CC)) {

MongoDB データベースを更新するか、使用しているデータベース バージョンと互換性のある PHP ドライバーを探してください。

于 2012-11-09T15:55:47.290 に答える