可以在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的限制...
答案 0 :(得分: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。