登录
首页 >  Golang >  Go问答

使用Golang计算MongoDB投影中嵌套数组的长度

来源:stackoverflow

时间:2024-03-22 15:22:28 492浏览 收藏

golang学习网今天将给大家带来《使用Golang计算MongoDB投影中嵌套数组的长度》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习Golang或者已经是大佬级别了,都非常欢迎也希望大家都能给我建议评论哈~希望能帮助到大家!

问题内容

在 mongodb 中,我喜欢将嵌套数组的所有长度一起计算。 它只是一个 mongodb 文档。

idfordb := "621101966rf42c24a8f41b87"
ctx, cancel := context.withtimeout(context.background(), time.second * 20)
defer cancel()
options := options.findoneoptions{
        projection: bson.m{
            "test":          "$test",
            "count": bson.m{}, // count should placed here
        },
    }
result := clients.mongoclient.database("somedb").collection("somecollection").findone(ctx, bson.m{"_id": idfordb}, &options)

所有编号下的物体都将被计数

{
   "test":"other",
   "list":[
      {
        "number":[
            {
                "value": "1"
            }, 
            {
                "value": "2"
            },
            {
                "value": "2"
            }
        ]
      },
      {
        "number":[
            {
                "value": "1"
            }, 
            {
                "value": "2"
            },
            {
                "value": "2"
            }
        ]
      },
      {
        "number":[
            {
                "value": "1"
            }, 
            {
                "value": "2"
            }
        ]
      }
   ]
}

“number”字段的输出应为 8,因为“number”对象下有 8 个文档。


正确答案


使用 mongodb 语法,您可以使用 $reduce 来实现:

db.collection.aggregate([
  {$project: {
      test: "$test",
      count: {
        $reduce: {
          input: "$list",
          initialValue: 0,
          in: {$add: ["$$value", {$size: "$$this.number"}]}
        }
      }
    }
  }
])

查看它在 playground example 上的工作原理

理论要掌握,实操不能落!以上关于《使用Golang计算MongoDB投影中嵌套数组的长度》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>