MongoCursorException:MongoDB as_array() 中查询中的错误跳过值

Posted

技术标签:

【中文标题】MongoCursorException:MongoDB as_array() 中查询中的错误跳过值【英文标题】:MongoCursorException : bad skip value in query in MangoDB as_array() 【发布时间】:2012-09-18 15:26:06 【问题描述】:

我有一个名为“公司”的 mongo 集合,它看起来像这样:


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

...

我使用Kohana 3.2 作为我的框架和MangoDb 库。

我想编写一个函数来检索所有项目并为用户 (Retrieving a Subset of Fields) 列出它们。

这是我的公司模型:

<?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      */

这个错误的原因是什么,我该如何解决这个问题?

【问题讨论】:

我认为这是因为您的变量 $from 是负值。你能确认是不是这样吗? @Devrun 不,这不是负面的。正如我在这里的一个 cmets 中提到的,当我尝试对结果调用 as_array() 函数时,就会出现错误。 【参考方案1】:

当您将“skip”值传递给小于 0 的查询时,会出现此错误。我建议将您作为“skip”传入的值打印到“工厂”函数以进行确认。

不知道您的数据,或者该特定行被调用的位置,我无法确切说明为什么要传入负数,但这就是错误的原因。

【讨论】:

调用Mango Iterator类的as_array()函数时出现错误,迭代器有数据,没有'skip'值传递给'factory'函数。

以上是关于MongoCursorException:MongoDB as_array() 中查询中的错误跳过值的主要内容,如果未能解决你的问题,请参考以下文章

mong 的 安装 和测试

mong 按 geometry 搜索 地理位置信息

unity的mong.data.sqlite.dll 在哪儿

mongo 查询 距离 某个点 多少 米距离 感谢 提供的数据。 感谢 mvc的 demo 。反正 就是各种感谢 文档之类的。

MongoDB

playbook部署mangodb