通过在 Go 中检查 MongoDB 中的多个属性值来检索项目列表
目标是通过匹配多个来检索 MongoDB 中的项目列表属性值,类似于SQL中的IN条件。在本例中,目标是计算包含场地列表数组的 JSON 文档中“linux”和“ubuntu”用户代理的出现次数。每个场地列表都有一个 sum 子文档数组,其中包含用户代理名称和值。
解决方案涉及使用 MongoDB 中的聚合框架和 Go 中的 mgo 包。以下是聚合管道的细分:
-
按场地 ID 过滤: 使用 $match 管道选择venueList.id 字段与所需场地 ID 匹配的文档(例如, “VID1212”和“VID4343”)。
-
展开场地列表:使用 $unwind 管道对venueList 数组进行非规范化,为每个场地创建单独的文档。
-
过滤场地 ID:展开后,再次过滤文档,以确保仅保留所需的场地 ID。
-
展开总和子文档:展开总和子文档数组以非规范化用户代理名称和值。
-
分组和求和: 使用 $group 管道按用户代理名称对文档进行分组,并使用 $sum 运算符对相应的值求和。
-
创建独立计数字段:为了便于阅读,您可以在 $group 管道中使用三元运算符 ($cond) 为“linux”和“ubuntu”创建独立计数字段。
-
获得更好性能的替代方法:为了更有效的替代方案,您可以使用稍微不同的 $group 管道来聚合用户代理计数并按名称对它们进行分组。
最后,使用 mgo.Collection.Pipe() 方法将聚合管道转换为 Go,以针对 MongoDB 集合执行它。这将返回一个项目列表,以及指定用户代理和场地 ID 的相关计数。
以上是如何使用 Go 有效地统计 MongoDB 中多个地点的用户代理出现次数?的详细内容。更多信息请关注PHP中文网其他相关文章!