1

私は「会社」と呼ばれるモンゴコレクションを持っています。これは次のようになります。

{
    "_id" : ObjectId("..."),
    "name" : "company_1",
    "active" : false,
    "projects" : [
        {
            "_id" : ObjectId("..."),
            "name" : "Prj_1",
            ...
        },
        {
            "_id" : ObjectId("..."),
            "name" : "Prj_2" ,
            ...
        }
    ],
    "rating" : 0,
    ...
}
...

フレームワークとMangoDbライブラリとしてKohana3.2使用しています。

すべてのプロジェクトを取得してユーザー用に一覧表示する関数を作成したい(フィールドのサブセットの取得)。

これは私の会社のモデルです:

<?php

class Model_Company extends Mango {

    protected $_db = 'default';
    protected $_collection = 'companies';
    protected $_fields = array(
        'name' => array(
            'type' => 'string',
            'required' => TRUE,
        ),
        'active' => array(
            'type' => 'boolean',
        ),
        'rating' => array(
            'type' => 'float',
        ),

        'projects' => array(
            'type' => 'has_many',
        ),
        ...
        ...
    );

    public function data_list($from = 0, $limit = 10, $sort = NULL)
    {
        return Mango::factory('company')->load(array( 'limit' => $limit, 'sort' => $sort, 'skip' => $from ));
    }

}

これは、埋め込まれたプロジェクトモデルです。

<?php

class Model_Project extends Mango {

    protected $_embedded = TRUE;
    protected $_db = 'default';
    //protected $_collection = 'projects';
    protected $_fields = array(
        '_id' => array(
            'type' => 'MongoId'
        ),
        'name' => array(
            'type' => 'string',
            'required' => TRUE,
        ),
        ...
        ...

    );

    public function data_list($from = 0, $limit = 10, $sort = NULL)
    {
        return Mango::factory('company')->load(array(
            'limit' => $limit, 
            'sort' => $sort, 
            'skip' => $from ,
            'fields'=>array('projects' => TRUE)
         ));
    }

}

以下の行を実行しようとすると:

$projects_list = Mango::factory('project')->data_list($from, $this->list_items_per_page)->as_array();

以下のエラーメッセージが表示されます。

MongoCursorException [ 10105 ]: bad skip value in query

MODPATH\mongo\classes\mango\iterator.php [ 108 ]

103     /**
104      * Iterator: rewind
105      */
106     public function rewind()
107     {
108         $this->_cursor->rewind();
109     }
110 
111     /**
112      * Iterator: valid
113      */

このエラーの原因は何ですか?この問題を解決するにはどうすればよいですか?

4

1 に答える 1

0

このエラーは、0 未満の「skip」値をクエリに渡すと発生します。「factory」関数に「skip」として渡した値を出力して確認することをお勧めします。

データや特定の行が呼び出されている場所がわからないため、負の数が渡された理由を正確に言うことはできませんが、それがエラーの原因です。

于 2012-09-27T16:16:45.750 に答える