0

我在 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 编写此查询。更具体地说,我没有执行unwind的选项。如果有人可以帮助我,那就太好了,

版本信息:

Laravel:5.5.32

MongoDB:数据库版本 v3.6.2

php: 7.1.10

谢谢你。

4

1 回答 1

1

这通常是我的做法:

User::raw(function ($collection) {
        return $collection->aggregate([
           ['$project' => [
                "tags" => 1,
                 ...
            ]],
            ['$unwind' => '$tags'],
            ['$group' =>
                [
                    '_id'=>'$tags',
                    'count' => ['$sum'=>1]
                ]
            ],
        ]);
    })
于 2018-03-09T14:47:11.070 回答