Php 在mongodb中对子数组中的数据进行排序

Php 在mongodb中对子数组中的数据进行排序,php,mongodb,Php,Mongodb,可以在mongo数据库的子数组中对数据进行排序吗 { "_id" : ObjectId("4e3f8c7de7c7914b87d2e0eb"), "list" : [ { "id" : ObjectId("4e3f8d0be62883f70c00031c"), "datetime" : 1312787723, "comments" :

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

{   "_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的limit…

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

如果评论的当前顺序可以更改,那么最好的解决方案是在MongoDB文档中对它们进行排序(
find()
,然后对每个文档的评论进行排序并更新()。如果您希望保持注释的当前内部顺序,则必须在每次查询后对每个文档进行排序

在这两种情况下,排序都将使用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; });
}
foreach($doc['list']作为$list){
//使用lambda函数,需要PHP5.3
usort($list['comments'],函数($a,$b){return$a[“datetime”]<$b[“datetime”]?-1:1;});
}

如果不能使用PHP5.3,请用普通函数替换lambda函数。请看。

thx,我已经这样做了,但我认为可以用mongo来做,但thx需要回复;)如果你有一个解决方案,最好与我们分享。