gpt4 book ai didi

php - jenssegers 如何将 MongoDB 聚合查询转换为 Laravel MongoDB

转载 作者:IT老高 更新时间:2023-10-28 13:34:38 24 4
gpt4 key购买 nike

我有一个名为 changes 的 MongoDB 集合,其中包含以下数据

{
"date" : ISODate("2014-06-09T00:00:00.000Z"),
"field" : "ip",
"from" : "157.11.209.123",
"to" : "107.21.109.254"
}
{
"date" : ISODate("2014-05-15T00:00:00.000Z"),
"field" : "ip",
"from" : "107.21.109.254",
"to" : "157.11.209.123"
}
{
"date" : ISODate("2014-06-09T00:00:00.000Z"),
"field" : "registration",
"from" : "Old service",
"to" : "Some new service"
}

然后我想进行典型的 SQL 查询来计算出现次数并按 field 对其进行分组。所以,我在 MongoDB 中创建了查询

db.changes.group({
"key": {
"field": true
},
"initial": {
"count": 0,
},
"reduce": function(obj, prev) {
prev.count++;
},
});

它工作正常,但 我怎样才能将它转换为适用于 Laravel 4?我正在使用 jenssegers/laravel-mongodb 与 mongo 服务器进行通信。

此外,我在查询中有更多条件,我已将其删除以使我的问题看起来更清晰,因此我正在寻找将查询完全转换为 laravel 的解决方案,而不是其他可能的解决方案:)。

最佳答案

您最好使用聚合框架方法,并深入研究底层驱动程序提供的原始 MongoDB 集合对象来执行此操作。尝试翻译语法是一个更好的选择:

// Returns the original Mongo Result
$result = DB::collection('changes')->raw(function($collection)
{
return $collection->aggregate(array(
array(
'$group' => array(
'_id' => '$field',
'count' => array(
'$sum' => 1
)
)
)
));
});

结果与 .group() 之类的方法的结果略有不同,但它使用 MongoDB 服务器上的 native 代码,并且不依赖于像 .group 这样的 JavaScript 解释() 方法确实如此,它实际上是 mapReduce 的包装器。

最终结果比您脱离原生框架界面要快得多,而且通常也更有效率。

所以使用原生 MongoDB 方式以获得最佳性能。

关于php - jenssegers 如何将 MongoDB 聚合查询转换为 Laravel MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24142931/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com