如何在jenssegers / laravel-mongodb中放松?

时间:2018-01-31 18:12:36

标签: php mongodb laravel jenssegers-mongodb

我正在和Laravel一起使用mongodb。我还使用jenssegers/laravel-mongodb来执行数据库活动。我有一个包含用户数据的集合,其中图片的路径与他给出的标签一起存储。有点类似于Instagram。现在我想对数据执行标记明智计数,即对于每个标记,有多少记录。下面是名为user_contents的集合的结构:

{
    "_id": ObjectId("5a6f41fbf4f1f331b4006d7d"),
    "user_id": "1",
    "file_name": "rBrnbxjJXckR1CnvljZ4eZiXFWFWBobJiguUbHzd.jpeg",
    "tags": ["blue", "girl"],
    "created_at": ISODate("2018-01-29T15:47:06Z"),
    "updated_at": ISODate("2018-01-29T15:47:06Z")
}

我运行以下查询以获取在mongo客户端中完美运行的所需数据

db.user_contents.aggregate([{
"$project": {
    "tags": 1
}
}, {
"$unwind": "$tags"
}, {
"$group": {
    "_id": "$tags",
    "count": {
        "$sum": 1
    }
}
}]);

但我不知道如何使用jenssegers编写此查询。更具体地说,我没有选择执行展开。如果有人可以帮助我,那就太好了,

版本信息:

Laravel:5.5.32

MongoDB:db version v3.6.2

php:7.1.10

谢谢。

1 个答案:

答案 0 :(得分:1)

这通常是我如何去做的:

User::raw(function ($collection) {
        return $collection->aggregate([
           ['$project' => [
                "tags" => 1,
                 ...
            ]],
            ['$unwind' => '$tags'],
            ['$group' =>
                [
                    '_id'=>'$tags',
                    'count' => ['$sum'=>1]
                ]
            ],
        ]);
    })