2011-02-22 40 views
0

我有一个PHP-MongoDB项目。我使用的是:MongoDB排序仅适用于集合的一部分

我有一个排序方法的问题。

我有这个集合(注意[ '秩序']属性):

[4d642296bb3dfde40c000002] => Array 
    (
     [_id] => MongoId Object 
      (
       [$id] => 4d642296bb3dfde40c000002 
      ) 

     [project_id] => 4d642296bb3dfde40c000001 
     [parent_id] => 4d642296bb3dfde40c000001 
     [version] => 0 
     [title] => Introducción 
     [body] => Introducción Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
     [order] => 0 
    ) 

[4d642296bb3dfde40c000003] => Array 
    (
     [_id] => MongoId Object 
      (
       [$id] => 4d642296bb3dfde40c000003 
      ) 

     [project_id] => 4d642296bb3dfde40c000001 
     [parent_id] => 4d642296bb3dfde40c000001 
     [version] => 0 
     [title] => Marco Contextual 
     [body] => Marco Contextual Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
     [order] => 2 
    ) 

[4d642296bb3dfde40c000004] => Array 
    (
     [_id] => MongoId Object 
      (
       [$id] => 4d642296bb3dfde40c000004 
      ) 

     [project_id] => 4d642296bb3dfde40c000001 
     [parent_id] => 4d642296bb3dfde40c000001 
     [version] => 0 
     [title] => Marco Conceptual 
     [body] => Marco Conceptual Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
     [order] => 3 
    ) 

[4d642296bb3dfde40c000005] => Array 
    (
     [_id] => MongoId Object 
      (
       [$id] => 4d642296bb3dfde40c000005 
      ) 

     [project_id] => 4d642296bb3dfde40c000001 
     [parent_id] => 4d642296bb3dfde40c000001 
     [version] => 0 
     [title] => Capitulo I 
     [body] => Capitulo I Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
     [order] => 4 
    ) 

[4d642296bb3dfde40c000006] => Array 
    (
     [_id] => MongoId Object 
      (
       [$id] => 4d642296bb3dfde40c000006 
      ) 

     [project_id] => 4d642296bb3dfde40c000001 
     [parent_id] => 4d642296bb3dfde40c000001 
     [version] => 1 
     [title] => Capitulo II 
     [body] => Capitulo II Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
     [order] => 5 
    ) 

[4d642296bb3dfde40c000007] => Array 
    (
     [_id] => MongoId Object 
      (
       [$id] => 4d642296bb3dfde40c000007 
      ) 

     [project_id] => 4d642296bb3dfde40c000001 
     [parent_id] => 4d642296bb3dfde40c000001 
     [version] => 0 
     [title] => Conclusión 
     [body] => Conclusión Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
     [order] => 6 
    ) 

[4d6422a7bb3dfde40c000008] => Array 
    (
     [_id] => MongoId Object 
      (
       [$id] => 4d6422a7bb3dfde40c000008 
      ) 

     [project_id] => 4d642296bb3dfde40c000001 
     [parent_id] => 4d642296bb3dfde40c000001 
     [version] => 0 
     [title] => i1 
     [body] => New Lorem Ipsum 
     [order] => 1 
    ) 

,我从这个得到:

function get_entries(){ 

    $project_id = key($this->projects_model->get_project()); 

    $data=array(
     'project_id' => $project_id 
    ); 

    return $this->mdb->get(
     $this->mdb->sinapsisDB->entries, 
     $data, 
     array('order'=>1) 
    ); 
} 

正如你可以看到我试图排序结果使用['order']属性,但返回的数组没有按这种方式排序,值得注意的是,前6个索引是在一个循环中同时创建的,而最后一个(不按顺序)是后来由一个函数创建,该函数根据所需的顺序搜索新条目并进行必要的['order']操作o让他们适合。

起初我还以为是从vvvlad连接器“获得”的方法是行不通的,但是当我尝试

db.entries.find().sort({$order:1}) 

在蒙戈客户端同样的情况

我想,这与一些关系'索引值',但我不明白为什么这种简单的排序方法不起作用。

预先感谢您的时间:)

+0

您正在通过shell运行“db.entries.find()。sort({$ order:1})”吗?不应该是db.entries.find()。sort({'order':1})? – 2011-02-22 22:22:33

回答

0

我只是跑在蒙戈下面的测试,一切看起来是正确的:

db.foo.drop() 
db.foo.insert({ text : "blah", order : 1 }) 
db.foo.insert({ text : "bl", order : 0 }) 
db.foo.insert({ text : "blahblah", order : 2 }) 
printjson(db.foo.find().sort({ order : 1 }).toArray()) 

我不熟悉vvvlad的代码,但肯定是有一个问题你的shell例子。

db.entries.find().sort({$order:1}) 

$order是不正确的(无$)。

你确定vvvlad的代码支持排序吗?

+0

非常感谢您在我身边测试了您的建议,同时我还在进一步阅读MongoDB文档和PHP。 我正在使用print_r在屏幕上显示集合,但我将最后一个['order']属性保存为字符串而不是整数,这是防止正确排序的错误。愚蠢的错误,但发生时,一次学习很多东西嘿嘿 谢谢非常多的答案和你的时间:))...哦,是的,vvvlad支持排序:)我的坏所有的时间。 – escusado 2011-02-22 22:23:48