2011-08-23 58 views
1

可以对mongo数据库中的子数组中的数据进行排序吗?在mongodb中对子数组中的数据进行排序

{ "_id" : ObjectId("4e3f8c7de7c7914b87d2e0eb"), 
    "list" : [ 
      { 
       "id" : ObjectId("4e3f8d0be62883f70c00031c"), 
       "datetime" : 1312787723, 
       "comments" : 
        { 
         "id" : ObjectId("4e3f8d0be62883f70c00031d") 
         "datetime": 1312787723, 
        }, 
        { 
         "id" : ObjectId("4e3f8d0be62883f70c00031d") 
         "datetime": 1312787724, 
        },     
        { 
         "id" : ObjectId("4e3f8d0be62883f70c00031d") 
         "datetime": 1312787725, 
        }, 
      } 
     ], 
    "user_id" : "3" } 

例如,我想按字段“datetime”排序评论。谢谢。或者只是选择所有数据并将其排序在PHP代码中,但是我的查询在mongo的限制下工作...

回答

2

使用MongoDB,您可以对文档进行排序或仅选择文档的某些部分,但可以不会修改搜索查询返回的文档。

如果您的评论的当前顺序可以更改,那么最好的解决方案是在MongoDB文档(find(),然后对每个文档,对其评论和update())进行排序。如果您想保留当前的评论内部顺序,则必须在每个查询后对每个文档进行排序。

在这两种情况下,排序都将使用PHP完成。例如:

foreach ($doc['list'] as $list) { 
    // uses a lambda function, PHP 5.3 required 
    usort($list['comments'], function($a,$b){ return $a["datetime"] < $b["datetime"] ? -1 : 1; }); 
} 

如果您不能使用PHP 5.3,请将lambda函数替换为普通函数。请参阅usort() examples

+0

thx,我已经这样做了,但我认为可以用mongo来做,但Thx用于回复;) –

+1

如果您有解决方案,将它与我们其他人分享会很高兴。 –