我正在和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
谢谢。
答案 0 :(得分:1)
这通常是我如何去做的:
User::raw(function ($collection) {
return $collection->aggregate([
['$project' => [
"tags" => 1,
...
]],
['$unwind' => '$tags'],
['$group' =>
[
'_id'=>'$tags',
'count' => ['$sum'=>1]
]
],
]);
})