如何使用jenssegers / laravel-mongodb软件包获取文档集合中的最大日期和最小日期?

kra*_*tos 1 php mongodb laravel

我有一些看起来像这样的文件:

{
    "_id" : ObjectId("5826182e2e94e0aefc541924"),
    "calls" : [ 
        {
            "call_date" : "2016-08-16 00:00:00.000",
            "updated_at" : ISODate("2016-11-11T19:12:46.905Z"),
            "created_at" : ISODate("2016-11-11T19:12:46.905Z"),
            "_id" : ObjectId("5826182e2e94e0aefc541925")
        }
    ],
        [ 
        {
            "call_date" : "2016-08-19 00:00:00.000",
            "updated_at" : ISODate("2016-11-11T19:12:46.905Z"),
            "created_at" : ISODate("2016-11-11T19:12:46.905Z"),
            "_id" : ObjectId("5826182e2e94f0aefc541925")
        }
    ],
        [ 
        {
            "call_date" : "2016-08-07 00:00:00.000",
            "updated_at" : ISODate("2016-11-11T19:12:46.905Z"),
            "created_at" : ISODate("2016-11-11T19:12:46.905Z"),
            "_id" : ObjectId("5826182e2j94e0aefc541925")
        }
    ]

}
Run Code Online (Sandbox Code Playgroud)

我希望获得整个收藏中的最小日期和最大日期。因此,在上述情况下,我希望将2016-08-07 00:00:00.000作为最小日期,并将2016-08-19 00:00:00.000作为最大日期。我不确定是否必须使用某种聚合函数或常规查询。谢谢你的帮助

Jan*_*lem 5

您可以使用Laravel的收藏集:

$collection = collect($arr['calls']);
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用maxmin方法,并将相关键作为参数:

$collection->max('call_date');
$collection->min('call_date');
Run Code Online (Sandbox Code Playgroud)

但是我不确定这是否适用于日期字符串。如果没有,类似这样的东西应该起作用:

$value = function($item) { 
  return strtotime($item['call_date']); 
};

$collection->max($value);
$collection->min($value);
Run Code Online (Sandbox Code Playgroud)