首页 > 解决方案 > 尝试输出组的名称和组的大小(有多少行符合条件)

问题描述

所以,我有一个 mongo 数据库填充(21k 个输入),其中包含操作(有 5 个不同的操作)id、时间等列。

我需要获取每个动作的名称,以及该动作发生了多少次。例如:USERPROPERTY_CHANGED - 755

我已经在这里尝试了Laravel Eloquent groupBy() 中的几乎所有内容,并且还返回了每个组的计数

然后我尝试创建另一个集合,在其中我逐个输入字段,然后获取它们,我的迁移如下所示:

<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class actionPopularity extends Migration
{
    public function up()
    {
        Schema::create('actionPopularity', function (Blueprint $collection) {
            $collection->Increments('id');
            $collection->string('action');
            $collection->integer('count');
        });
    }
    public function down()
    {
        Schema::dropIfExists('actionPopularity');
    }
}

但是这个生成的集合只有一个字段——id。

这是一种有效的方法(它表明它可以与数据库一起使用)

控制器:

public function database_test()
{
    $actions = Action::groupBy('action')->get();

    return view('database_test',compact('actions'));
}

看法:

{{$actions}} 

输出:

[
    {
        "_id":
        {
            "action":"OBJECT_INSERT"
        },
        "action":"OBJECT_INSERT"
    },
    {
        "_id":
        {
            "action":"OBJECT_MODIFY"
        },
        "action":"OBJECT_MODIFY"

    },
    {
        "_id":
        {
            "action":"null"
        },
        "action":"null"
    },
    {
        "_id":
        {
            "action":"USERPROPERTY_CHANGED"
        },
        "action":"USERPROPERTY_CHANGED"
    },
    {
        "_id":
        {
            "action":"OBJECT_DELETE"
        },
        "action":"OBJECT_DELETE"
    }
]

最终我想得到两个数组,一个带有动作名称,另一个带有该动作被调用的次数,将其放入图表中。

标签: laravelmongodb

解决方案


请尝试以下代码:

public function database_test()
{
    $actions = Action::select('action', 'count')->groupBy('action')->get()->toArray();

    return view('database_test',compact('actions'));
}

推荐阅读