2012-09-26 16 views
1

我有所谓的“公司”一蒙戈集合,看起来像这样:MongoCursorException:在MangoDB as_array()查询坏跳过值

{ 
    "_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  */ 

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

+0

我认为这是因为**的**变量是负值。你能否验证是否是这种情况? – Devrun

+0

@Devrun不,它不是消极的。正如我在这里的一个评论中提到的,当我尝试对结果调用as_array()函数时,就会出现错误。 – YAAK

回答

0

当您向小于0的查询中传入“跳过”值时,会出现此错误。我建议将您传入的值打印为'跳过'到'工厂'功能以确认。

不知道你的数据,或者特定行被调用的地方,我不能确切地说明为什么传入一个负数,但这是错误的原因。

+0

当调用Mango Iterator类的as_array()函数时,会出现错误,该迭代器具有数据,并且没有传递给“工厂”函数的“跳过”值。 – YAAK